今天在看源码的时候突然发现了一个从来没见过的类CountDownLatch,百度了一下,说是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,允许一个或者多个线程一直等待。可能是从c++中带来的习惯。我一直用无限循环for(;;)来等待线程的结束。
了解了这个类的作用后,简单了测试了一下,使用非常简单,代码如下:
import java.util.concurrent.CountDownLatch;
public class Test1 {
public static void main(String [] args) throws InterruptedException
{
///创建对象,指定等待的线程数
CountDownLatch latch = new CountDownLatch(2);
new C1(latch).start();
new C1(latch).start();
///这里进行等待,latch.countDown()调用两次后,就不再等待,直接退出
latch.await();
System.out.println("exit thread!");
}
}
class C1 extends Thread{
private CountDownLatch latch;
public C1(CountDownLatch latch){
this.latch = latch;
}
@Override
public void run() {
for(int x = 0; x < 10; x++)
{
System.out.println(Thread.currentThread().getName()+"===="+x);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
latch.countDown(); ///这里调用一次,等待的线程数减1.
}
}