用 CyclicBarrier 实现线程同步

线程 T1 和 T2 要做到步调一致,都完成后通知到线程 T3

创建了一个计数器初始值为 2 的 CyclicBarrier,你需要注意的是创建 CyclicBarrier 的时候,我们还传入了一个回调函数,当计数器减到 0 的时候,会调用这个回调函数。

CyclicBarrier 的计数器有自动重置的功能,当减到 0 的时候,会自动重置你设置的初始值。

// 订单队列
Vector<P> pos;
// 派送单队列
Vector<D> dos;
// 执行回调的线程池
Executor executor = Executors.newFixedThreadPool(1);
final CyclicBarrier barrier =new CyclicBarrier(2, ()->{executor.execute(()->check());});void check(){P p = pos.remove(0);D d = dos.remove(0);// 执行对账操作diff = check(p, d);// 差异写入差异库save(diff);
}void checkAll(){// 循环查询订单库Thread T1 = new Thread(()->{while(存在未对账订单){// 查询订单库pos.add(getPOrders());// 等待barrier.await();}});T1.start();  // 循环查询运单库Thread T2 = new Thread(()->{while(存在未对账订单){// 查询运单库dos.add(getDOrders());// 等待barrier.await();}});T2.start();
}

Java并发编程实战~CyclicBarrier相关推荐

  1. Java并发编程实战_不愧是领军人物!这种等级的“Java并发编程宝典”谁能撰写?...

    前言 大家都知道并发编程技术就是在同一个处理器上同时的去处理多个任务,充分的利用到处理器的每个核心,最大化的发挥处理器的峰值性能,这样就可以避免我们因为性能而产生的一些问题. 大厂的核心负载肯定是非常 ...

  2. 视频教程-Java并发编程实战-Java

    Java并发编程实战 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能,加 ...

  3. 【极客时间】《Java并发编程实战》学习笔记

    目录: 开篇词 | 你为什么需要学习并发编程? 内容来源:开篇词 | 你为什么需要学习并发编程?-极客时间 例如,Java 里 synchronized.wait()/notify() 相关的知识很琐 ...

  4. 《Java 并发编程实战》--读书笔记

    Java 并发编程实战 注: 极客时间<Java 并发编程实战>–读书笔记 GitHub:https://github.com/ByrsH/Reading-notes/blob/maste ...

  5. Java并发编程实战笔记2:对象的组合

    设计线程安全的类 在设计现车让安全类的过程之中,需要包含以下三步: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问策略 实例封闭 通过封闭机制与合适的加锁策略结合起来 ...

  6. aqs clh java_【Java并发编程实战】—– AQS(四):CLH同步队列

    在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形. 其主要从双方面进行了改造:节点的结构与节点等待机制.在结构上引入了 ...

  7. java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...

    [Java教程][JAVA并发编程实战]12.使用condition实现多线程下的有界缓存先进先出队列 0 2016-11-29 17:00:10 package cn.study.concurren ...

  8. Java并发编程实战————恢复中断

    中断是一种协作机制,一个线程不能强制其他线程停止正在执行的操作而去执行其他操作. 什么是中断状态? 线程类有一个描述自身是否被中断了的boolean类型的状态,可以通过调用 .isInterrupte ...

  9. Java并发编程实战————Executor框架与任务执行

    引言 本篇博客介绍通过"执行任务"的机制来设计应用程序时需要掌握的一些知识.所有的内容均提炼自<Java并发编程实战>中第六章的内容. 大多数并发应用程序都是围绕&qu ...

最新文章

  1. java switch语句练习 从键盘输入2个数和一个运算符(+,-,*,/),输出运算结果
  2. ununtu20.04系统中如何划词翻译_如何高效阅读PDF外文文献,这一篇文章全搞定
  3. .net框架读书笔记---引用参数(ref/out)
  4. Vue优化策略_项目发布_01
  5. C++与QML交互(信号与槽通知QML,C++注册QML,QML结点映射C++类)
  6. Leetcode算法题(C语言)9--移动零
  7. JavaScript实现继承的方式和各自的优缺点
  8. Uninstalling ASP.NET MVC 1.1 after installing Visual Studio 2010 beta 2
  9. exchange系列(一)exchange2010邮件服务器的安装与规划
  10. 机床数据采集之凯恩帝(KND)机床 IP地址设置
  11. Adobe Photoshop CC 2019 精简版
  12. Pull request 团队合作开发使用详解
  13. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
  14. k8s 部署 owncloud
  15. win10系统老显卡(AMD Radeon HD 8500M)驱动错误
  16. python基于django校园信息管理平台设计与实现(项目源码+视频录制+截图)
  17. fseek, _fseeki64 函数应用
  18. Fritzing软件绘制Arduino面包板接线图传感器模块库文件273
  19. 爬取《斗破苍穹》小说
  20. Win7系统不识别DVD光驱是怎么回事

热门文章

  1. 东南大学王萌 | “神经+符号”学习与多模态知识发现
  2. 论文浅尝 | 基于知识图谱难度可控的多跳问题生成
  3. jieba分词并做分析
  4. JavaWeb:tomcat服务器安装总结及Http协议
  5. 知识图谱最新权威综述论文解读:实体发现
  6. phpstorm 不能自动打开上次的历史文件
  7. hibernate框架学习之使用SQLQuery查询数据
  8. 04-numpy-笔记-transpose
  9. Openstack(二)基本环境准备--网络、时间、yum源等
  10. MySQL安装之后没有MySQL数据库的原因