public static void main(String[] args) {
// countDownLatch初始化 ,其功能类似于计数器。。
/*常见的应用场景: 某个线程必须等待其他的线程执行完毕之后才执行;
*
* 例如: 主线程,必须等待其他两个线程执行完毕才开始执行(代码如下)
* **/
CountDownLatch countDownLatch = new CountDownLatch(2);
// 创建第一个线程
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("子线程开始执行。。。。。");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 休眠1秒
// countDownLatch数量减一
countDownLatch.countDown();
System.out.println("子线程执行结束了。。。。。。");
}
}).start();
// 创建第二个线程
new Thread() {
public void run() {
System.out.println("子线程开始了执行。。。。。。。。。。。。");
try {
// 休眠了1秒
Thread.sleep(1000);
System.out.println("子线程结束了执行。。。。。。。。。。。。。");
countDownLatch.countDown();// 数量减一
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
try {
//等待前两个线程执行完毕才开始执行下面的线程
System.out.println("等待前两个线程执行完毕之后,再开始执行");
countDownLatch.await();
System.out.println("前两个线程已经执行完毕了,开始执行主线程。。。。");
for (int i = 0; i < 10; i++) {
System.out.println("主线程 :"+Thread.currentThread().getName()+"*****"+i);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}