countDownLatch简介说明
下文笔者讲述countDownLatch简介说明,如下所示
countDownLatch简介
countDownLatch在java1.5被引入 跟它一起被引入的工具类 还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue countDownLatch位于java.util.cucurrent包下 countDownLatch类的功能: 使一个线程等待其他线程各自执行完毕后再执行 countDownLatch通过一个计数器来实现 计数器的初始值是线程的数量 每当一个线程执行完毕后,计数器的值就-1 当计数器的值为0时,即所有线程都运行完毕 此时在闭锁上等待的线程就可以恢复工作了。
countDownLatch类方法简介
countDownLatch类中只提供了一个构造器 //参数count为计数值 public CountDownLatch(int count) { }; 类中最重要的三个方法: //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 public void await() throws InterruptedException { }; //和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行 public boolean await(long timeout, TimeUnit unit) throws InterruptedException { }; //将count值减1 public void countDown() { };例
public class CountDownLatchTest { public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(2); System.out.println("主线程开始执行…… ……"); //第一个子线程执行 ExecutorService es1 = Executors.newSingleThreadExecutor(); es1.execute(new Runnable() { @Override public void run() { try { Thread.sleep(3000); System.out.println("子线程:"+Thread.currentThread().getName()+"执行"); } catch (InterruptedException e) { e.printStackTrace(); } latch.countDown(); } }); es1.shutdown(); //第二个子线程执行 ExecutorService es2 = Executors.newSingleThreadExecutor(); es2.execute(new Runnable() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程:"+Thread.currentThread().getName()+"执行"); latch.countDown(); } }); es2.shutdown(); System.out.println("等待两个线程执行完毕…… ……"); try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("两个子线程都执行完毕,继续执行主线程"); } } ----运行以上代码,将输出以下信息----- 主线程开始执行…… …… 等待两个线程执行完毕…… …… 子线程:pool-1-thread-1执行 子线程:pool-2-thread-1执行 两个子线程都执行完毕,继续执行主线程
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。