JAVA 线程等待
来源:互联网 发布:java怎么实现导出word 编辑:程序博客网 时间:2024/05/21 22:24
CyclicBarrier只要有一个线程没完成,所有线程等待
CountDownLatch监听线程操作(比如初始化),等待操作完成之后,通知其他线程
//应用public class Main { public static void main(String[] args) throws Exception{ Map cm =new HashMap(); ExecutorService executor = Executors.newCachedThreadPool(); CountDownLatch latch = new CountDownLatch(3); Worker w1 = new Worker(latch, "张三",cm); Worker w2 = new Worker(latch, "李四",cm); Worker w3 = new Worker(latch, "王二",cm); executor.execute(w3); executor.execute(w2); executor.execute(w1); System.out.println("老板正在监工......"); try { latch.await(); } catch (InterruptedException e) { } System.out.println("结束,老板开始检查了!"); System.out.println("一共搬了"+cm.get("z")+"块砖,大家辛苦了。"); executor.shutdown(); }}//对象public class Worker implements Runnable { private CountDownLatch downLatch; private String name; private Map workedJobs; private int jobs; public Worker(CountDownLatch downLatch, String name,Map workedJobs) { this.downLatch = downLatch; this.name = name; this.workedJobs = workedJobs; } public void run() { this.doWork(); try { TimeUnit.SECONDS.sleep(new Random().nextInt(3)); } catch (InterruptedException ie) {} Integer wj = (Integer)workedJobs.get("z"); int sum = (wj==null?0:wj); workedJobs.put("z", sum +=jobs); System.out.println("--------- "+ this.name + "活干完了!"); this.downLatch.countDown();//通知我做完了 } private void doWork() { jobs=new Random().nextInt(10); System.out.println(this.name + " ,搬了"+jobs+"块砖!"); }}
结果:
老板正在监工……
李四 ,搬了5块砖!
王二 ,搬了5块砖!
张三 ,搬了7块砖!
——— 王二活干完了!
——— 李四活干完了!
——— 张三活干完了!
结束,老板开始检查了!
一共搬了17块砖,大家辛苦了。
0 0
- JAVA 线程等待
- 【JAVA】等待子线程
- java线程等待与通知
- java 线程等待与唤醒
- Java线程的等待状态
- java 等待线程/线程池执行完毕
- 用JAVA实现线程等待提示框
- 用JAVA实现线程等待提示框
- 用JAVA实现线程等待提示框
- 用JAVA实现线程等待提示框
- 用JAVA实现线程等待提示框
- 用JAVA实现线程等待提示框
- Java CyclicBarrier 设置线程等待点
- Java线程间通信-等待唤醒机制
- java 主线程 等待 子线程
- Java如何等待子线程执行结束
- Java如何等待子线程执行结束
- Java如何等待子线程执行结束
- 【Unity 3D学习】NGUI中Tab的实现
- OpenCv的xml读写(opencv教程大全)
- js中String对象
- 在O(1)时间内删除单链表结点
- Convert Sorted List to Binary Search Tree
- JAVA 线程等待
- SSH项目
- Cocos2d-x 3.x 图形学渲染系列十六
- 第三方支付集成
- C++处理Ctrl+C中断信号
- 2017最全的Java大致学习方向
- GitHub教程:注册、上传及项目管理
- hdu 6000 Wash 贪心
- 【POJ2587】Airline Hub(经纬度求距离)