游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

java集合包LinkedBlockingQueue底层源码

  一、demopublicclassLinkedBlockingQueueTest{publicstaticvoidmain(String〔〕args)throwsException{LinkedBlockingQueuelinkedBlockingQueuenewLinkedBlockingQueue(10);linkedBlockingQueue。put(今天头条);System。out。println(linkedBlockingQueue。take());IteratoriteratorlinkedBlockingQueue。iterator();while(iterator。hasNext()){System。out。println(iterator。next());}}}二、构造方法分析
  Condition:如果你获取了一把锁,然后调用了Condition。await(),此时会释放锁,当前线程会进入一个cnodition等待队列,事后人家来唤醒你,Cnodition。signal(),这个时候会从condition等待队列中把你加入到wait等待队列里去,然后人家释放锁,就会唤醒wait等待队列里的线程尝试来获取锁;当前队列元素数量privatefinalAtomicIntegercountnewAtomicInteger();Lockheldbytake,poll,etc获取队列元素时加的锁privatefinalReentrantLocktakeLocknewReentrantLock();WaitqueueforwaitingtakesprivatefinalConditionnotEmptytakeLock。newCondition();Lockheldbyput,offer,etc放入元素时加的锁privatefinalReentrantLockputLocknewReentrantLock();WaitqueueforwaitingputsprivatefinalConditionnotFullputLock。newCondition();publicLinkedBlockingQueue(intcapacity){if(capacity0)thrownewIllegalArgumentException();队列最大大小this。capacitycapacity;last和head指针指向空节点lastheadnewNodeE(null);}三、put方法publicvoidput(Ee)throwsInterruptedException{if(enull)thrownewNullPointerException();Note:conventioninallputtakeetcistopresetlocalvarholdingcountnegativetoindicatefailureunlessset。intc1;创建一个单向节点NodeEnodenewNodeE(e);获取添加元素的锁finalReentrantLockputLockthis。putLock;获取队列当前数量finalAtomicIntegercountthis。count;加一个可以被中断的锁,保证同一时间只有一个线程可以添加数据如果加锁线程被中断了,此时加锁会失败,抛出一个线程中断的异常出来putLock。lockInterruptibly();try{Notethatcountisusedinwaitguardeventhoughitisnotprotectedbylock。Thisworksbecausecountcanonlydecreaseatthispoint(allotherputsareshutoutbylock),andwe(orsomeotherwaitingput)aresignalledifiteverchangesfromcapacity。Similarlyforallotherusesofcountinotherwaitguards。判断队列是否已经满了while(count。get()capacity){调用添加元素锁的Condition的await方法进入等待队列进行等待,并且释放锁notFull。await();}设置尾节点的下一个节点为新创建节点将新创建节点设置为尾节点enqueue(node);调用getAndIncrement方法,先获取count数量,在将count队列元素加一ccount。getAndIncrement();判断当前元素小于队列最大数量则唤醒等待线程继续放入元素if(c1capacity)notFull。signal();}finally{释放锁putLock。unlock();}如果队列之前为空的话,则调用signalNotEmpty方法唤醒之前等待消费的线程进行消费if(c0)signalNotEmpty();}staticclassNodeE{Eitem;指向下一个节点NodeEnext;Node(Ex){itemx;}}privatevoidenqueue(NodeEnode){assertputLock。isHeldByCurrentThread();assertlast。nextnull;设置尾节点的下一个节点为新创建节点将新创建节点设置为尾节点lastlast。nextnode;}privatevoidsignalNotEmpty(){finalReentrantLocktakeLockthis。takeLock;takeLock。lock();try{唤醒阻塞的消费线程notEmpty。signal();}finally{takeLock。unlock();}}四、take方法publicEtake()throwsInterruptedException{Ex;intc1;获取队列中元素数量finalAtomicIntegercountthis。count;获取元素出队锁finalReentrantLocktakeLockthis。takeLock;加一个可以被中断的锁,保证同一时间只有一个线程可以添加数据如果加锁线程被中断了,此时加锁会失败,抛出一个线程中断的异常出来takeLock。lockInterruptibly();try{while(count。get()0){notEmpty。await();}获取第一个元素xdequeue();调用getAndIncrement方法,先获取count数量,在将count队列元素加一ccount。getAndDecrement();if(c1)如果当前队列数量大于1则进行唤醒其他等待消费线程notEmpty。signal();}finally{释放锁takeLock。unlock();}判断队列之前是否已经满了,满了说明可能有有线程在等待则调用signalNotFull唤醒等待线程if(ccapacity)signalNotFull();returnx;}privateEdequeue(){asserttakeLock。isHeldByCurrentThread();asserthead。itemnull;NodeEhhead;获取头节点下一个元素,因为头节点一般为空,忽略NodeEfirsth。next;将当前头节点的下一个元素指向自己,后续会gc回收掉h。nexth;helpGC在将下一个元素设置为头节点headfirst;获取数据Exfirst。item;将新的头节点元素设置为空,保证头节点元素一直为空first。itemnull;返回数据returnx;}privatevoidsignalNotFull(){finalReentrantLockputLockthis。putLock;putLock。lock();try{notFull。signal();}finally{putLock。unlock();}}五、iterator方法publicIteratorEiterator(){returnnewItr();}Itr(){将队列中获取元素和添加元素的锁进行加锁fullyLock();try{currenthead。next;if(current!null)currentElementcurrent。item;}finally{对获取元素锁和添加元素锁进行释放fullyUnlock();}}publicEnext(){将队列中获取元素和添加元素的锁进行加锁fullyLock();try{if(currentnull)thrownewNoSuchElementException();ExcurrentElement;lastRetcurrent;获取下一个元素currentnextNode(current);currentElement(currentnull)?null:current。item;返回元素returnx;}finally{对获取元素锁和添加元素锁进行释放fullyUnlock();}}voidfullyLock(){putLock。lock();takeLock。lock();}voidfullyUnlock(){takeLock。unlock();putLock。unlock();}privateNodeEnextNode(NodeEp){for(;;){NodeEsp。next;if(sp)returnhead。next;if(snulls。item!null)returns;ps;}}

为什么手机激活后无法退货,不激活怎么知道手机有没有问题呢?激活的作用就表明手机已经卖出去了,再卖就是二手手机,可以防止黄牛倒卖手机(对于紧俏的型号,需要在店里现场激活就是这个原因),如果激活了还能无理由退货,那么就给很多不法分子或者存……今年双十一,苹果销售额大幅下跌,为什么?苹果2021年双十一销量还是不错的。通过京东双十一数据可以看出,苹果双十一总销量排在第二位,第一是小米。而排在第三的就是华为。从这份榜单也可以看出,虽然苹果销……5G航空公司的混乱我们所知道的一切在美国推出增强型移动服务的尝试有点混乱。航空业和运输监管机构担心新的5G天线会干扰一种关键类型的飞机高度计,这种高度计对于恶劣天气下的飞机着陆至关重要。但无线运营商和电信监管机……苹果砍掉34家供应商哪座城市是中国便利店天堂?教师热再起股融易资讯今日话题苹果砍掉34家供应商央媒呼吁摆脱苹果依赖症搭上苹果产业链的快车,一些企业赚得盆满钵满。但另一方面,对苹果公司这一单一大客户的依赖,也造成了潜在风险……日本那么强,为什么日本生产的手机在中国几乎无人问津?日本国内最风靡的手机是iPhone,本地手机如索尼旗下的Xperia、夏普旗下的aquos都是排在后几位的。就以大众所熟知的索尼旗下的Xperia为例,来讲讲日系手机为什么至今……俄专家智能技术将深刻改变城市面貌与家居生活据俄罗斯卫星通讯社报道,俄罗斯普列汉诺夫经济大学信息学教研室副教授亚历山大季莫费耶夫表示,大规模应用智能技术可以显著提高工业劳动生产率,让住宅公用事业迈上新台阶。季莫费耶……B轮融资落地长安新能源将于2025年前后完成公开上市北京商报讯(记者刘晓梦)1月24日,重庆长安新能源汽车科技有限公司(以下简称长安新能源)B轮容易正式完成。此次B轮融资,包括长安汽车在内的10家企业投资,共募集资金约49。77……什么是ROMRAMDRAMSRAM和FLASH的区别ROM和RAM指的都是半导体存储器,ROM是ReadOnlyMemory的缩写,RAM是RandomAccessMemory的缩写。ROM在系统停止供电的时候仍然可以保持数据,……六千字纪要阿里低估了,除了硬拼,回购分拆也都不会落下本文作者:长桥海豚投研以下是阿里巴巴第三财季的电话会议内容,如要参考财报解读请点击《阿里还在历劫?这样的白菜价就别挑刺了》。一、管理层汇报增量信息:中国电商业务……华米Amazfit跃我GTR3对比华为WatchGT2,更低如今,智能穿戴设备已经是各大手机厂商,在IoT领域关键的布局。其中,华为WatchGT系列凭借具有商务感的设计,较为全面的功能,得到了市场广泛的认可。但很多消费者纠结的是,是应……为什么显卡更新换代极快,每年都会有更强的新系列,而声卡却永远因为显卡可以不断追求更高的分辨率,更高的刷新率,更快的响应速度。而声卡需要做的只是还原声音本来的样子,只需做到原来接收的声音是什么样,声卡输出的就是什么样就可以了。简单的……2021年全国青少年人工智能科普活动网络嘉年华上线来源:经济日报客户端今年暑假,中共中央办公厅、国务院办公厅印发了《关于进一步减轻义务教育阶段学生作业负担和校外培训负担的意见》,减轻中小学生课业负担,是全面实施素质教育的本质要……
手机空间不足拯救计划!分享四个手机储存空间清理的大家好我是非凡资源李李昨天给大家带来了几款电脑清理软件,今天来给大家带来四款手机的清理软件,每一款都值得拥有啊,而且实用的很那。不多说了开始吧一。【安卓】最强清理神器,清……创纪录!三星集团发布未来三年的投资和雇佣计划,预计投资1。3央视财经(记者吕博慧)据韩国国际广播电台25日报道,三星集团发布了未来三年的投资和雇佣计划。三星集团预计未来三年将共投资240万亿韩元(约合人民币1。33万亿元),创史上最大规……搭载首颗自研影像芯片,vivoX70全系外型曝光近日,外媒91mobiles曝光了vivo下半年的旗舰X70系列全系三款机型的外观渲染图,该手机正面采用中部开孔屏设计,后置矩形模组带有蔡司认证小蓝标。X70爆料称……我国累计建设5G基站91。6万座,占全球70,有何实际意义?我国已建成全球最大光纤网络、4G和5G独立组网网络,目前5G已建成基站91。6万个,占全球70,5G连接数已经超过3。65亿,占全球80。下一步我国将加强对5G、大数据、基础软……好耳机不只AirPods?这几款蓝牙耳机也值得入手蓝牙耳机,可以说是近年来的业界新宠,已经成为了众多手机音乐爱好者的必备之物,前有苹果的AirPods珠玉在前,后有国内厂商推出的高性价比耳机奋勇争先,各种品牌型号耳机层出不穷。……小米手机10周年,回顾历代经典机型8月10日晚19:30,小米CEO雷军举行年度演讲,当晚MIX4、小米平板5等一系列新品也一同发布。值得一提的是,2021年也是小米手机的10周年,DoNews带你回顾一……特斯拉哨子国内上架,卖350元被抢空1月5日消息特斯拉Cyberwhistle哨子日前在国内上架,售价350元。特斯拉官网显示,这款产品已经出于缺货状态。特斯拉Cyberwhistle哨子以特斯拉旗下电动卡……屠龙者终成恶龙,AMD苏姿丰表示将减少关注低端CPU,注重高兼容机之家小牛带你发现更多新潮数码资讯。AMD,YES!当大家喊出这句话时,AMD推出的CPU和显卡就肯定战胜了英特尔或者英伟达,给大家带来了更加实惠的产品。自从2017……21日0点京东云无线宝229元秒杀21日0点开始,京东云无线宝鲁班64GB畅想版开启秒杀,限时优惠价229元,一年包回本,热销爆款,可放心入手。京东云推出的无线宝云路由能利用家中闲置网络来为用户自动打工,……未来世界,没芯片寸步难行!中国将从何处发力,才不看美国的脸色图为芯片光刻机目前世界的信息技术产业正在迅速发展并融入进人民群众的生活当中,因此可以说在10年之后如果没有芯片将会寸步难行,而正是由于看到了这样的未来,中国霸气发话了,不……只看页面信息,互联网买菜如何让人放心?习近平总书记指出,民以食为天,加强食品安全工作,关系我国13亿多人的身体健康和生命安全,必须抓得紧而又紧。各级党委和政府及有关部门要全面做好食品安全工作,坚持最严谨的标准、最严……用来办公的话,MacBookAir和MacBookpro谁值这种问题见一次喷一次,就好像来问16g的手机iPhone8和8p哪个好一样。你特么爱买那个办公用哪个,没人嘲笑你。但是一个成年人连买东西也要来问,要么就是穷,要么就是没主见……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网