您的位置:首页 > 编程语言 > Java开发

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();然后这三个线程就会按照我们预期的顺序完成。

代码如下:

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: