CountDownLatch
CountDownLatch允许一个或多个线程等待其他线程完成操作。
例如:
CountDownLatch c = new CountDownLatch(2);
CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待N个点完成,这里就传入N.
当我们调用CountDownLatch的countDown方法时,N就会减1,CountDownLatch的await方法会阻塞当前
线程,直到N变为0。由于countDown方法可以用在任何地方,所以这里说的N个点,可以是N个线程,也可以
是1个线程里的N个步骤。
注:CountDownLatch的计数器智能使用一次
示例代码1
package concurrency.countdownlatch;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchTest1 {
static CountDownLatch c = new CountDownLatch(2);
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("parser1 finished");
c.countDown();
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("parser2 finished");
c.countDown();
}
}).start();
c.await();
System.out.println("all parsers finished");
}
}
示例代码2
package concurrency.countdownlatch;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchTest2 {
static CountDownLatch c = new CountDownLatch(2);
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("1");
c.countDown();
System.out.println("2");
c.countDown();
}
}).start();
c.await();
System.out.println("3");
}
}