幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

面试官说说CyclicBarrier原理?

  CountDownLatch
  CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景。
  举个例子,早上部门开会,有人在上厕所,这时候需要等待所有人从厕所回来之后才能开始会议。publicclassCountDownLatchTest{privatestaticintnum3;privatestaticCountDownLatchcountDownLatchnewCountDownLatch(num);privatestaticExecutorServiceexecutorServiceExecutors。newFixedThreadPool(num);publicstaticvoidmain(String〔〕args)throwsException{executorService。submit((){System。out。println(A在上厕所);try{Thread。sleep(4000);}catch(InterruptedExceptione){e。printStackTrace();}finally{countDownLatch。countDown();System。out。println(A上完了);}});executorService。submit((){System。out。println(B在上厕所);try{Thread。sleep(2000);}catch(InterruptedExceptione){e。printStackTrace();}finally{countDownLatch。countDown();System。out。println(B上完了);}});executorService。submit((){System。out。println(C在上厕所);try{Thread。sleep(3000);}catch(InterruptedExceptione){e。printStackTrace();}finally{countDownLatch。countDown();System。out。println(C上完了);}});System。out。println(等待所有人从厕所回来开会。。。);countDownLatch。await();System。out。println(所有人都好了,开始开会。。。);executorService。shutdown();}}
  代码执行结果:A在上厕所B在上厕所等待所有人从厕所回来开会。。。C在上厕所B上完了C上完了A上完了所有人都好了,开始开会。。。
  初始化一个CountDownLatch实例传参3,因为我们有3个子线程,每次子线程执行完毕之后调用countDown()方法给计数器1,主线程调用await()方法后会被阻塞,直到最后计数器变为0,await()方法返回,执行完毕。他和join()方法的区别就是join会阻塞子线程直到运行结束,而CountDownLatch可以在任何时候让await()返回,而且用ExecutorService没法用join了,相比起来,CountDownLatch更灵活。
  CountDownLatch基于AQS实现,volatile变量state维持倒数状态,多线程共享变量可见。CountDownLatch通过构造函数初始化传入参数实际为AQS的state变量赋值,维持计数器倒数状态当主线程调用await()方法时,当前线程会被阻塞,当state不为0时进入AQS阻塞队列等待。其他线程调用countDown()时,state值原子性递减,当state值为0的时候,唤醒所有调用await()方法阻塞的线程CyclicBarrier
  CyclicBarrier叫做回环屏障,它的作用是让一组线程全部达到一个状态之后再全部同时执行,而且他有一个特点就是所有线程执行完毕之后是可以重用的。publicclassCyclicBarrierTest{privatestaticintnum3;privatestaticCyclicBarriercyclicBarriernewCyclicBarrier(num,(){System。out。println(所有人都好了,开始开会。。。);System。out。println();});privatestaticExecutorServiceexecutorServiceExecutors。newFixedThreadPool(num);publicstaticvoidmain(String〔〕args)throwsException{executorService。submit((){System。out。println(A在上厕所);try{Thread。sleep(4000);System。out。println(A上完了);cyclicBarrier。await();System。out。println(会议结束,A退出);}catch(Exceptione){e。printStackTrace();}finally{}});executorService。submit((){System。out。println(B在上厕所);try{Thread。sleep(2000);System。out。println(B上完了);cyclicBarrier。await();System。out。println(会议结束,B退出);}catch(Exceptione){e。printStackTrace();}finally{}});executorService。submit((){System。out。println(C在上厕所);try{Thread。sleep(3000);System。out。println(C上完了);cyclicBarrier。await();System。out。println(会议结束,C退出);}catch(Exceptione){e。printStackTrace();}finally{}});executorService。shutdown();}}
  输出结果为:A在上厕所B在上厕所C在上厕所B上完了C上完了A上完了所有人都好了,开始开会。。。会议结束,A退出会议结束,B退出会议结束,C退出
  从结果来看和CountDownLatch非常相似,初始化传入3个线程和一个任务,线程调用await()之后进入阻塞,计数器1,当计数器为0时,就去执行CyclicBarrier中构造函数的任务,当任务执行完毕后,唤醒所有阻塞中的线程。这验证了CyclicBarrier让一组线程全部达到一个状态之后再全部同时执行的效果。
  再举个例子来验证CyclicBarrier可重用的效果。publicclassCyclicBarrierTest2{privatestaticintnum3;privatestaticCyclicBarriercyclicBarriernewCyclicBarrier(num,(){System。out。println();});privatestaticExecutorServiceexecutorServiceExecutors。newFixedThreadPool(num);publicstaticvoidmain(String〔〕args)throwsException{executorService。submit((){System。out。println(A在上厕所);try{Thread。sleep(4000);System。out。println(A上完了);cyclicBarrier。await();System。out。println(会议结束,A退出,开始撸代码);cyclicBarrier。await();System。out。println(C工作结束,下班回家);cyclicBarrier。await();}catch(Exceptione){e。printStackTrace();}finally{}});executorService。submit((){System。out。println(B在上厕所);try{Thread。sleep(2000);System。out。println(B上完了);cyclicBarrier。await();System。out。println(会议结束,B退出,开始摸鱼);cyclicBarrier。await();System。out。println(B摸鱼结束,下班回家);cyclicBarrier。await();}catch(Exceptione){e。printStackTrace();}finally{}});executorService。submit((){System。out。println(C在上厕所);try{Thread。sleep(3000);System。out。println(C上完了);cyclicBarrier。await();System。out。println(会议结束,C退出,开始摸鱼);cyclicBarrier。await();System。out。println(C摸鱼结束,下班回家);cyclicBarrier。await();}catch(Exceptione){e。printStackTrace();}finally{}});executorService。shutdown();}}
  输出结果:A在上厕所B在上厕所C在上厕所B上完了C上完了A上完了会议结束,A退出,开始撸代码会议结束,B退出,开始摸鱼会议结束,C退出,开始摸鱼C摸鱼结束,下班回家C工作结束,下班回家B摸鱼结束,下班回家
  从结果来看,每个子线程调用await()计数器减为0之后才开始继续一起往下执行,会议结束之后一起进入摸鱼状态,最后一天结束一起下班,这就是可重用。
  CyclicBarrier还是基于AQS实现的,内部维护parties记录总线程数,count用于计数,最开始countparties,调用await()之后count原子递减,当count为0之后,再次将parties赋值给count,这就是复用的原理。当子线程调用await()方法时,获取独占锁,同时对count递减,进入阻塞队列,然后释放锁当第一个线程被阻塞同时释放锁之后,其他子线程竞争获取锁,操作同1直到最后count为0,执行CyclicBarrier构造函数中的任务,执行完毕之后子线程继续向下执行Semaphore
  Semaphore叫做信号量,和前面两个不同的是,他的计数器是递增的。publicclassSemaphoreTest{privatestaticintnum3;privatestaticintinitNum0;privatestaticSemaphoresemaphorenewSemaphore(initNum);privatestaticExecutorServiceexecutorServiceExecutors。newFixedThreadPool(num);publicstaticvoidmain(String〔〕args)throwsException{executorService。submit((){System。out。println(A在上厕所);try{Thread。sleep(4000);semaphore。release();System。out。println(A上完了);}catch(Exceptione){e。printStackTrace();}finally{}});executorService。submit((){System。out。println(B在上厕所);try{Thread。sleep(2000);semaphore。release();System。out。println(B上完了);}catch(Exceptione){e。printStackTrace();}finally{}});executorService。submit((){System。out。println(C在上厕所);try{Thread。sleep(3000);semaphore。release();System。out。println(C上完了);}catch(Exceptione){e。printStackTrace();}finally{}});System。out。println(等待所有人从厕所回来开会。。。);semaphore。acquire(num);System。out。println(所有人都好了,开始开会。。。);executorService。shutdown();}}
  输出结果为:A在上厕所B在上厕所等待所有人从厕所回来开会。。。C在上厕所B上完了C上完了A上完了所有人都好了,开始开会。。。
  稍微和前两个有点区别,构造函数传入的初始值为0,当子线程调用release()方法时,计数器递增,主线程acquire()传参为3则说明主线程一直阻塞,直到计数器为3才会返回。
  Semaphore还还还是基于AQS实现的,同时获取信号量有公平和非公平两种策略主线程调用acquire()方法时,用当前信号量值需要获取的值,如果小于0,则进入同步阻塞队列,大于0则通过CAS设置当前信号量为剩余值,同时返回剩余值子线程调用release()给当前信号量值计数器1(增加的值数量由传参决定),同时不停的尝试因为调用acquire()进入阻塞的线程总结
  CountDownLatch通过计数器提供了比join更灵活的多线程控制方式,CyclicBarrier也可以达到CountDownLatch的效果,而且有可复用的特点,Semaphore则是采用信号量递增的方式,开始的时候并不需要关注需要同步的线程个数,并且提供获取信号的公平和非公平策略。
  END

解析家用汽车载货规则折叠座椅能不能拉货?假设关注车型是SUVMPV,在看车辆空间的时候总会去观察行李箱(后备箱),同时还要看折叠后排座椅后的扩展空间会有多大;一般都会看最大进深,也就是到前排座椅靠背的最大深度,从紧凑……你了解比萨斜塔的故事吗?比萨斜塔是意大利比萨大教堂的一座钟楼,或称独立式钟塔。这座塔是中世纪欧洲的奇迹,也是罗马式建筑风格的非凡代表。用闪光的白色和淡彩色大理石建造而成的斜塔地基直径52英尺,直……德国线上总决赛报名开启2021德国汉诺威吉泽金国际钢琴邀请赛比赛流程及安排8月15日(报名截止日期)所有参赛选手都需要在8月15日之前将参赛视频链接提交到德国总决赛报名系统中。8月20日至8月30日比赛评委将于8……陈情令开播2周年,主角配角差别大,谁吃到了大爆剧的红利?2019年6月27日开播的古装电视剧《陈情令》陈情令到如今正好两周年,这一部电视剧喜欢的人爱之入骨,不喜欢的也大有人在,但是谁也不能否认,它是那一年爆火的电视剧,播出期间和剧终……一篇文章搞懂,基金到底是个什么鬼?之前在《香帅的北大金融学》专栏里面看到一个数据,让我很震惊!现在有一个假设,如果让时间回到2017年的12月,你22岁毕业,家里这时候给了你10W块钱,你面临着一个关于这个钱的……女子被安保拖拽接近赤裸,地铁安保保护了谁的安全?昨日,西安地铁上发生了一件令人诧异,难以入目的事。地铁安保人员将一女子暴力拖拽,使该女子身体大面积裸露,事情发酵后,官方给出回应,该女子与其他乘客发生口角,期间不停辱骂身边乘客……娇身冠养钟欣潼揭开与陈冠希拍照的遮羞布,如今怎么样了?婚内出轨美艳女网红离婚后又说是阿娇不爱他台湾绿茶二婚男到底有多虚伪?2020年5月8日港媒曝光了阿娇离婚的消息据友人透露此次分开是阿娇主动提……王子文吴永恩综艺恋情成真?深夜聚餐同回酒店,举止互动超甜近日有媒体拍到王子文与吴永恩的私下同框画面,两人和朋友一起出现在某餐厅聚餐。等到聚餐结束之后,王子文还和吴永恩一起回到了酒店。曝光的视频中两人举止互动亲密,看起来感情十分不错。……四杨双丽上位戏(5)被耽误的迪丽热巴,被摧毁的范冰冰娱乐圈中,有一个词曾经明星们避之不及,但现在越来越流行,甚至有人以此为原点步步高升花瓶。这个词代表着娱乐圈一类人:光有长相,没有能力。或者说,相比能力,长相更容易让……李承铉全职带娃6年,自曝患产后抑郁症明明是谁带娃谁抑郁最近!我迷上了一个有妇之夫!小戚薇4天的李承铉,人长得又帅:舞台又炸:脾气又温柔:关键是还顾家,愿意为了戚薇退居二线,顶着被人嘲吃软饭的压力,当起全职奶……刘德华吃素,念经,什么都怕,拼命三郎什么时候也认怂了?了解伊姐本人最新动态、参与线下活动加伊姐微信:eemoviekf04(不闲聊)文伊姐(周桂伊)杉姐前不久,刘德华接受了鲁豫的访问。在访问中刘德华承认自己怂了,……罗晋和唐嫣的婚姻就是典型的门当户对1983年12月6日,唐嫣出生于上海市南市区(2000年并入黄浦区),父亲唐宏威是一名行政职员,母亲李桐晏是一名外企白领。家庭条件好,据悉,有爆料称唐嫣家里看不起邱泽学历才导致……
景甜回应资源咖,曾害怕出演司藤,从资源咖到人间富贵花5月13日,演员景甜在《了不起的姐姐2》中接受采访,谈起了之前观众对于她资源咖这也标签,并且景甜也借采访回应了自己对于资源咖的概念。当初的景甜在我们眼中可谓是真正的顺风顺……志愿军战士郑时文,发现美军在射程范围内取水,班长不准开枪1949年新中国成立,中国人民真正站了起来,在国内形势还不为明朗的时候。作为中国的友国,朝鲜便面临着美国的入侵,为了支援共党国家,我国便组织了一批志愿军,前往朝鲜一同抗美援朝。……迪士尼被寡姐愤怒告上法庭,米老鼠是违反合约,但她不怕成弃儿?01寡姐斯嘉丽约翰逊将迪士尼告上法庭美国当地时间7月29日,一则迪士尼被好莱坞演员斯嘉丽约翰逊告上法庭的消息让大家震惊,因为在大家心中,迪士尼这种级别的国际电影发行方,一……舞蹈出身的4位男星杨洋上榜,罗云熙第二,第一是星二代舞蹈出身的4位男星:杨洋上榜,罗云熙第二,第一是星二代!第四:黄轩12岁时父母离异,他随母亲去了广州生活,由于迷恋迈克杰克逊,从此走上了舞蹈之路。中学就读于广东舞蹈学校,大学就……提帮功立储的重要一步,出生照印在硬币上,未来国王当定了虽然玛哈国王膝下三个子女中,时常陪伴他在身边的是长女帕公主和次女思蕊公主,而提帮功王子却是常年都在德国上学。深知泰国王室的人都知道,宫廷中已经到了立储的关键时刻,而国王终于放出……李沁长得这么仙,穿搭竟然喜欢凹气场,不过还真挺好看李沁今年可真的是太火了,而她的流量除了今年的几部古装剧大火之外,很大一部分程度上也来自于李沁自身的资源,能够进军娱乐圈,长相身材自然不差,除此之外,对于时尚的领悟能力,也丝毫不……DC宇宙新危机,神奇女侠要换人了,原因恐是华纳舍不得加片酬大家好,天天一起看电影,我是喜欢看电影的笨熊。华纳的DC宇宙一直以来问题不断,近来唯一让粉丝高兴的事情可能就是《正义联盟》导演剪辑版确认的新闻了,但是近来DC宇宙又出了新……宝宝身体缺微量元素,会通过这几个睡眠动作表现出来,妈妈要留意现在的家长在孩子吃的方面格外注意,而且现在生活条件好了,孩子基本上也不缺什么营养,反而在微量元素方面家长关注的却比较少,导致很多孩子平时虽然吃的很好,但是身体素质依然不高,整天……太后专业户刘雪华这辈子只推荐过三个人!第三个人现在被全网黑刘雪华曾经是琼瑶剧御用的女演员!她一生演戏无数,得到过无数成就,被称为泪眼皇后、专业母后等等琼瑶曾这样评价过她:我再也没有第二个刘雪华了。可见刘雪华专业能力有多强?对这样……这就是街舞4最新一期节目,有2大黑幕,没镜头的舞者太可怜最新一期节目,是团舞battle,分成了八个小组,进行团舞对抗,过程的确过瘾,但看完整期节目,又发现,节目组存在着2大黑幕,而且捧人的计划初现端倪。节目组看重的是哪些人?……浪姐2成团分析预测这五位姐姐稳成团,剩下两位不明确《浪姐2》成团预测:有五位姐姐肯定稳稳成团,还有两位姐姐会是谁?《浪姐2》马上就要收官了。很多人已经知道了五公的分组,那英和周笔畅分别是两个队伍的队长。成团夜的决赛……参观主持人阿雅住的豪宅,家里装修温馨有爱,一进门就被迷住了阿雅在台湾是很出名的主持人,那时候的节目让人非常喜爱,她主持风格是非常大气的,就能感觉到她温文尔雅的气质,每个人的主持风格都要有特点,这样子才能显示出自己一片天地,在奇遇人生之……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网