用 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. Exchange企业实战技巧(3)配置Exchange证书
  2. SQL中declare申明变量
  3. 20080331 - What is a PID, How is it useful when troubleshooting a system
  4. 今天终于可以正常下班了
  5. L2-028 秀恩爱分得快-PAT团体程序设计天梯赛GPLT
  6. 集训8.21树状数组讲解
  7. SCOPE 中 SPFILE、MEMORY、BOTH 的小小区别
  8. android布局配置
  9. Windows 下安装 SVN 服务器、创建版本库、授权访问
  10. 苹果CMS接入GOGO支付实现个人收款回调详细教程(附插件)
  11. 玩转软路由 篇一:巨详细的修改Esxi7.0管理端口教程
  12. java-IO流基础知识
  13. Win10下运行红色警戒2
  14. 有趣的游戏-猜黑白纸
  15. Java 如何把gb2312编码转化为汉字(互转)
  16. 神话与历史中的吸血鬼
  17. c语言字符集的作用,1.属于C语言字符集中可显示字符的是()
  18. 回归损失函数2 : HUber loss,Log Cosh Loss,以及 Quantile Loss
  19. 在python中创建Excel文件并写入数据
  20. 蚂蚁集团俞仁杰:金融级云原生之多活容器集群高可用建设实践

热门文章

  1. 美团集群调度系统HULK技术演进
  2. 论文浅尝 | ExCAR: 一个事件图知识增强的可解释因果推理框架
  3. 京东2020算法工程师0824笔试题整理
  4. codevs 1052:地鼠游戏
  5. oracle 11g安装过程中问题:找不到WFMLRSVCApp.ear
  6. Robot Framework: 自定义自己的python库
  7. 虚拟内存管理习题补充
  8. Java-绘图相关技术
  9. java的oauth2.0_[转]Java的oauth2.0 服务端与客户端的实现
  10. java swing 多个线程,Swing与多线程