学做ppt的网站,wordpress site,wordpress 畅言,有虚拟主机wordpress1、简介
CountDownLatch是一个同步工具类#xff0c;用来携调多个线程之间的同步#xff0c;它是是使用一个计数器进行实现的#xff0c;计数器初始值为线程数量。当每一个线程完成自己任务后#xff0c;计数器的值就会减1。当计数器的值为0时#xff0c;表示所有的线程都…1、简介
CountDownLatch是一个同步工具类用来携调多个线程之间的同步它是是使用一个计数器进行实现的计数器初始值为线程数量。当每一个线程完成自己任务后计数器的值就会减1。当计数器的值为0时表示所有的线程都已经完成一些任务然后再CountDownLatch上等待的线程就可以恢复执行下来的任务。 CountDownLatch主要有两个方法countDown()和await()countDown()方法用于使计数器减一其一般是执行任务的线程调用await()方法是调用该方法的线程处于等待状态其一般是主线程调用。countDown()方法并没有规定一个线程只能调用一次当同一个线程调用多次countDown()方法时每次都会使计数器减一await()方法也并没有规定只能有一个线程执行该方法如果多个线程同时执行await()方法那么这几个线程都将处于等待状态并且以共享模式享有同一个锁。 2、方法API
方法说明await()使当前线程进入同步队列进行等待直到latch的值被减到0或者当前线程被中断当前线程就会被唤醒。await(long timeout, TimeUnit unit)等待timeout时间后count的值还不是0不再等待那么将继续执行countDown()使latch的值减1如果减到了0则会唤醒所有等待在这个latch上的线程。getCount()获得latch的数值。
3、使用
public class Test {public static void main(String[] args) throws InterruptedException {//当前执行的线程数量Integer poolNum 10;long start System.currentTimeMillis();//初始化线程运行的数量CountDownLatch countDownLatch new CountDownLatch(poolNum);MapInteger,Integer map new HashMap();for (int i 1; i poolNum; i) {//耗时Integer time i*1000;ThreadPoolUtils.execute(()-{try {//假设逻辑执行的耗时Thread.sleep(time);map.put(time,time);} catch (InterruptedException e) {e.printStackTrace();}finally {countDownLatch.countDown();}});}// 4分45秒 countDownLatch.getCount()还不是不再等待那么将继续执行countDownLatch.await(4 * 60 45);System.out.println(总耗时:(System.currentTimeMillis()-start));for (Integer key: map.keySet()){//打印出来的key值是没有顺序的因为竞争的CPU资源不一样System.out.println(map的key为:key map的值为: map.get(key));}}
}