阿狸网站建设,免费发广告的平台,网络营销案例ppt模板,动漫设计与制作英文CountDownLatch#xff0c;一个同步辅助类#xff0c;在完成一组正在其他线程中执行的操作之前#xff0c;它允许一个或多个线程一直等待。 主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 构造方法…CountDownLatch一个同步辅助类在完成一组正在其他线程中执行的操作之前它允许一个或多个线程一直等待。 主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 构造方法参数指定了计数的次数 countDown方法当前线程调用此方法则计数减一 awaint方法调用此方法会一直阻塞当前线程直到计时器的值为0 例子 public class CountDownLatchDemo { final static SimpleDateFormat sdfnew SimpleDateFormat(yyyy-MM-dd HH:mm:ss); public static void main(String[] args) throws InterruptedException { CountDownLatch latchnew CountDownLatch(2);//两个工人的协作 Worker worker1new Worker(zhang san, 5000, latch); Worker worker2new Worker(li si, 8000, latch); worker1.start();// worker2.start();// latch.await();//等待所有工人完成工作 System.out.println(all work done at sdf.format(new Date())); } static class Worker extends Thread{ String workerName; int workTime; CountDownLatch latch; public Worker(String workerName ,int workTime ,CountDownLatch latch){ this.workerNameworkerName; this.workTimeworkTime; this.latchlatch; } public void run(){ System.out.println(Worker workerName do work begin at sdf.format(new Date())); doWork();//工作了 System.out.println(Worker workerName do work complete at sdf.format(new Date())); latch.countDown();//工人完成工作计数器减一 } private void doWork(){ try { Thread.sleep(workTime); } catch (InterruptedException e) { e.printStackTrace(); } } } } 输出 Worker zhang san do work begin at 2011-04-14 11:05:11Worker li si do work begin at 2011-04-14 11:05:11Worker zhang san do work complete at 2011-04-14 11:05:16Worker li si do work complete at 2011-04-14 11:05:19all work done at 2011-04-14 11:05:19 CountDownLatch类有3个基本元素 初始值决定CountDownLatch类需要等待的事件的数量。await() 方法, 被等待全部事件终结的线程调用。countDown() 方法事件在结束执行后调用。当创建 CountDownLatch 对象时对象使用构造函数的参数来初始化内部计数器。每次调用 countDown() 方法, CountDownLatch 对象内部计数器减一。当内部计数器达到0时 CountDownLatch 对象唤醒全部使用 await() 方法睡眠的线程们。 不可能重新初始化或者修改CountDownLatch对象的内部计数器的值。一旦计数器的值初始后唯一可以修改它的方法就是之前用的 countDown() 方法。当计数器到达0时 全部调用 await() 方法会立刻返回接下来任何countDown() 方法的调用都将不会造成任何影响。 此方法与其他同步方法有这些不同 CountDownLatch 机制不是用来保护共享资源或者临界区。它是用来同步一个或者多个执行多个任务的线程。它只能使用一次。像之前解说的一旦CountDownLatch的计数器到达0任何对它的方法的调用都是无效的。如果你想再次同步你必须创建新的对象。 CountDownLatch 类有另一种版本的 await() 方法它是 await(long time, TimeUnit unit): 此方法会休眠直到被中断 CountDownLatch 内部计数器到达0或者特定的时间过去了。TimeUnit 类包含了:DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, 和 SECONDS.转载于:https://www.cnblogs.com/pypua/articles/7307648.html