植物百科网
当前位置: 首页 农业百科

java也可以用opencv库吗(让人高看一眼的并发工具类Phaser)

时间:2023-07-17 作者: 小编 阅读量: 1 栏目名: 农业百科

就可以利用Phaser来实现。结构分析Phaser有三个关键属性,首先是long类型的属性state,高位的32位用来保存Phaser进行在第几个阶段,然后接下来的16位用来保存当前阶段最大参与线程数量,最低16用来保存当前阶段已经到达的线程数量,当为0是会唤醒阻塞线程。

前面介绍的几个工具类大家或多或少都有听说过,但是Phaser却很少人知道,如果在面试中问到你能回答上来,会让面试官高看一眼的。

使用场景

现实中很多事情都是分很多个阶段,并且每个阶段都要都完成才能进行下一个阶段。比如就像大学时去吃饭一样,寝室几个都是在11点左右准备去吃午饭,首先是大家都要起床,然后一起出门,一起去吃完饭,最后一起回家。每一个过程中都有完成的先后,但是都会等待一起完成才会做接下来的事情。

每个阶段的等待好像都可以用上一篇文章讲的CyclicBarrier来实现,但是在这个场景下,由于有多个阶段,所以用CyclicBarrier难免有点复杂了。就可以利用Phaser来实现

用Phaser来实现

直接上代码吧,代码比较简单,没有设置额外的信息,具体代码如下图:

首先"phaser.bulkRegister(4);"与CyclicBarrier设置调用最大await方法次数一样,这里的意思是当phaser的arrive系列方法执行4次后当前阶段完成。

Person实现Runnable,有4个方法getUp()、goOut()、eat()、goHome()来表示做一个事情的4个阶段,每个方法在执行的最后调用"phaser.arriveAndAwaitAdvance();"来等待其他人完成,run()方法按顺序执行这4个方法。

new出4个Person并开始执行方法,4个对象所有前一个方法执行完成后才会开始执行下一个方法。执行结果如下:

id=2起床

id=1起床

id=0起床

id=3起床

id=3出门

id=0出门

id=2出门

id=1出门

id=1吃饭

id=2吃饭

id=0吃饭

id=3吃饭

id=3回家

id=2回家

id=0回家

id=1回家

可以看到几个线程相同的方法执行先后顺序不一样,但是肯定是所有同样的方法执行完成后才开始执行下一个方法。

结构分析

Phaser有三个关键属性,首先是long类型的属性state,高位的32位用来保存Phaser进行在第几个阶段,然后接下来的16位用来保存当前阶段最大参与线程数量,最低16用来保存当前阶段已经到达的线程数量,当为0是会唤醒阻塞线程。

evenQ和oddQ属性是链表结构,存储已完成处于等待的队列,与AQS中的Node类似,包含有一个Thead属性,用来保存线程用的,当最后一个参与者完成任务后唤醒队列中的线程继续执行下一个阶段的任务,或者结束任务。这里用两个链表是为了在单双阶段交替使用。

分析arriveAndAwaitAdvance方法

Phaser提供了很多方法,这里分析最重要的一个方法,理解原理其他方法应该也差不多了。源码主要的流程图如下图:

主要流程是:

(1)从state中计算出当前的阶段phaser和未到达的线程数量unarrived;

(2)修改state的值减一,因为unarrived是保存在state的最后16位,所以state减一就表示unarrived减一;

(3)unarrived大于1则调用internalAwaitAdvance阻塞线程;

(4)否则说明unarrived等于1,也就是当前线程是最后一个达到的,所以调用onAdvance唤醒阻塞线程;

(5)最后两步就是修改state的值,实际上就是为下一个阶段做准备,最后再次唤醒等待线程,实际上onAdvance也做了这些事情,这里是多次保证数据完整。

总结

可以看到Phaser与AQS下的工具类也差不多,都是维护一个state和同步队列,不过Phaser的state是long类型,前32为用来表达第几个阶段,紧接着16为用来表达最大线程数,最后16为用来表达未到达的线程数,也就是还可以有多少个线程调用这个方法就会是否所有阻塞的线程,并进入下一个阶段。

把state分成三个部分,在每个阶段只用-1就行,当最后16为减到0时,就进入下一个阶段,也就是把高位32为 1,低位16设置成中间的16位,实现重置阶段并记录进行的阶段。

Phaser相比CyclicBarrier或者CountDownLatch的优势是可以实现更多阶段的控制;同时Phaser每个阶段的任务数量可以控制(这篇文章这个不是重点,有兴趣可以去了解),而一个CyclicBarrier或者CountDownLatch的数量一旦确定不可修改。

Java程序员日常学习笔记,如理解有误欢迎各位交流讨论!

    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。