CountDownLatch基于线程计数器来实现并发访问控制,主要用于主线程等待其它子线程都执行完毕后再执行某某操作。
其使用步骤:
1.主线程定义CountDownLatch,参数等于要执行的子线程个数;
2.子线程运行完后掉latch.countDown,让计数器减去一,如果子线程定义在别处需要内置引用指向latch,通常可以通过构造函数传入;
3.每个子线程都执行完后,latch的计数器减成了0,此时停顿在latch.await()上的主线程便开始执行。
程序:
package ufo; import java.util.concurrent.CountDownLatch; public class LatchTest { public static void main(String... args) { System.out.println("主线程开始"); final CountDownLatch latch=new CountDownLatch(2); new Thread() { public void run() { try { System.out.println("匿名线程一开始"); Thread.sleep(1000); latch.countDown(); System.out.println("匿名线程一执行完毕"); }catch(Exception ex) { ex.printStackTrace(); } } }.start(); new Thread() { public void run() { try { System.out.println("匿名线程二开始"); Thread.sleep(2000); latch.countDown(); System.out.println("匿名线程二执行完毕"); }catch(Exception ex) { ex.printStackTrace(); } } }.start(); try { System.out.println("等待两个匿名线程执行完毕"); latch.await(); System.out.println("两个匿名线程已执行完毕,主线程继续执行"); }catch(Exception ex) { ex.printStackTrace(); } } }
输出:
主线程开始
匿名线程一开始
等待两个匿名线程执行完毕
匿名线程二开始
匿名线程一执行完毕
匿名线程二执行完毕
两个匿名线程已执行完毕,主线程继续执行
-END-