Java之CountDownLatch示例说明
下文笔者讲述CountDownLatch的功能简介及示例说明
学习完本篇之后,你将掌握CountDownLatch的简介说明,如下所示
学习完本篇之后,你将掌握CountDownLatch的简介说明,如下所示
CountDownLatch简介
CountDownLatch是一个同步工具类 它使用一个计数器来实现的 初始值为线程的数量 每当一个线程完成了自己的任务 计数器的值就相应得减1 当计数器到达0时 表示所有的线程都已运行完毕 然后在等待的线程就可以恢复执行任务
CountDownLatch中方法简介
CountDownLatch(int count): count为计数器的初始值 (一般需要多少个线程执行 count就设为几) countDown(): 每调用一次计数器值-1 直到count被减为0 代表所有线程全部执行完毕。 getCount(): 获取当前计数器的值 await(): 等待计数器变为0 即等待所有异步线程执行完毕。 boolean await(long timeout, TimeUnit unit): 此方法与await()区别: 此方法至多会等待指定的时间 超时后会自动唤醒 若timeout小于等于零,则不会等待 boolean 类型返回值: 若计数器变为零, 则返回 true; 若指定的等待时间过去 则返回 false
CountDownLatch应用场景
1.某个线程需要在其他n个线程执行完毕后再向下运行 2.多个线程并行执行同一个任务,提高响应速度
CountDownLatch示例
package com.java265; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class TestCountDownLatch { private static CountDownLatch countDownLatch = new CountDownLatch(3);//设定计数(只能使用一次不能重用) public static void main(String[] args) { waitThread(); threadRun(1); threadRun(2); threadRun(3); } public static void waitThread() { new Thread(() -> { System.out.println("run wait thread"); System.out.println("起始计数:" + countDownLatch.getCount()); try { countDownLatch.await(1, TimeUnit.SECONDS);//阻塞直到计数为0或者超时 System.out.println("超时结束第一个阻塞,计数:" + countDownLatch.getCount()); countDownLatch.await();//阻塞直到计数为0 System.out.println("结束第二个阻塞,计数:" + countDownLatch.getCount()); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("wait thread finished"); }).start(); } public static void threadRun(final int i) { new Thread(() -> { System.out.println("run thread " + i); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread " + i + " 计数减1"); countDownLatch.countDown();//计数减1 }).start(); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。