作用
等待其他线程执行完后,在执行某个线程。类似之前的join,但是比join更强大。join可以多个线程插队到A线程,A线程等多个线程结束后才执行(类似后面的CyclicBarrier),而CountDownLatch可以等待多个线程执行完才执行,灵活性比join更大。
主要方法
- countDown,计数器减1。这个方法可以一个线程执行一次,也可以一个线程执行多次。
- await,堵塞,等计数减为0的时候,才继续执行。
示例
public class CountDownLatchDemo {
static CountDownLatch countDownLatch = new CountDownLatch(2);
static class Thread1 implements Runnable {
@Override
public void run() {
countDownLatch.countDown();
System.out.println(Thread.currentThread().getName() + ":" + 1);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + 2);
countDownLatch.countDown();
}
}
public static void main(String[] args) {
Thread thread =new Thread(new Thread1(),"thread");
thread.start();
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + 3);
}
}
执行结果如下:
虽然线程thread休眠了2秒,但是main依然等到线程thread输出2后,才输出3。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。