java多线程中线程同步工具-CountDownLatch
2016-12-21 20:41
357 查看
Java文档解释:CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。
主要方法:
public CountDownLatch(int count);构造方法,传入count,表示前面有几个线程要先完成。
public void countDown(); 前面要完成的线程执行完后调用该方法,count会-1。
public void await() throws InterruptedException 要阻塞的线程,我们希望其他线程完成后再执行这个线程,就在这个线程中调用await().
使用:
假如有A ,B ,C三个线程。我们希望A,B完成以后C再执行。
此时,我们先定义出CountDownLatch:
CountDownLatch
countDownLatch=new CountDownLatch(2)
在A线程中完成自己的任务后调用:
countDownLatch.countDown();
在B线程中操作完成后调用:
countDownLatch.countDown();
在C线程中执行操作前先调用:
countDownLatch.await();
调用时,我们new出A,B,C三个线程,同时start();然后这三个线程就会按照我们预期的顺序完成。
代码如下:
代码中如果没有用到CountDownLatch时输出顺序应该是C,A,B.
加入CountDownLatch后输出顺序为A,B,C.
主要方法:
public CountDownLatch(int count);构造方法,传入count,表示前面有几个线程要先完成。
public void countDown(); 前面要完成的线程执行完后调用该方法,count会-1。
public void await() throws InterruptedException 要阻塞的线程,我们希望其他线程完成后再执行这个线程,就在这个线程中调用await().
使用:
假如有A ,B ,C三个线程。我们希望A,B完成以后C再执行。
此时,我们先定义出CountDownLatch:
CountDownLatch
countDownLatch=new CountDownLatch(2)
在A线程中完成自己的任务后调用:
countDownLatch.countDown();
在B线程中操作完成后调用:
countDownLatch.countDown();
在C线程中执行操作前先调用:
countDownLatch.await();
调用时,我们new出A,B,C三个线程,同时start();然后这三个线程就会按照我们预期的顺序完成。
代码如下:
final CountDownLatch countDownLatch = new CountDownLatch(2); Thread A = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); System.out.println("A县城"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { countDownLatch.countDown(); } } }); Thread B = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); System.out.println("B县城"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { countDownLatch.countDown(); } } }); Thread C = new Thread(new Runnable() { @Override public void run() { try { countDownLatch.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("C县城"); } }); A.start(); B.start(); C.start();
代码中如果没有用到CountDownLatch时输出顺序应该是C,A,B.
加入CountDownLatch后输出顺序为A,B,C.
相关文章推荐
- java多线程(13)--线程同步工具之CountDownLatch
- Java并发学习之十七——线程同步工具之CountDownLatch
- Java并发-多线程的线程同步工具类(12)
- Java多线程的监控分析工具(VisualVM)
- 第九章 Java多线程机制 05_线程同步_5
- Java多线程:线程同步——实验4
- java多线程下载工具
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- java多线程采集+线程同步
- 第九章 Java多线程机制 05_线程同步_3
- 第九章 Java多线程机制 05_线程同步_4
- 赵雅智_java 多线程(2)之线程同步
- Java自带的多线程监控分析工具(VisualVM)
- Java多线程(三)、线程同步
- 多线程拨号Java版(探讨synchronized和Lock线程同步)
- 第九章 Java多线程机制 05_线程同步_6
- java多线程工具--BlockingQueue
- Java多线程的线程同步需要注意的地方
- java例程练习(多线程[线程同步问题])
- 第九章 Java多线程机制 05_线程同步_ 12_总结