java CountDownLatch使用
来源:互联网 发布:数据分析平台需求文档 编辑:程序博客网 时间:2024/06/06 07:48
CountDownLatch可以让一个或多个任务进行等待,在其他一组任务完成之后再执行。CountDownLatch被设计为只触发一次,计数器不能被重置,CyclicBarrier可以进行重置。
public class TaskPortion implements Runnable{ private static int counter = 0; private final int id = counter++; private static Random rand = new Random(47); private final CountDownLatch latch; public TaskPortion(CountDownLatch latch){ this.latch = latch; } @Override public void run() { try { doWork(); latch.countDown(); } catch (Exception e) { // TODO: handle exception } } public void doWork() throws InterruptedException{ TimeUnit.MILLISECONDS.sleep(rand.nextInt(2000)); System.out.println(this+"completed"); } public String toString(){ return String.format("%1$-3d", id); }}
public class WaitingTask implements Runnable { private static int counter = 0; private final int id = counter++; private final CountDownLatch latch; public WaitingTask(CountDownLatch latch){ this.latch = latch; } @Override public void run() { try { latch.await(); System.out.println("latch barrier passed for "+this); } catch (Exception e) { // TODO: handle exception } } public void doWork() throws InterruptedException{ System.out.println(this+"completed"); } public String toString(){ return String.format("Waitingtask %1$-3d", id); }}
public class CountDownLatchDemo { static final int SIZE = 100; /** * @param args */ public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); CountDownLatch latch = new CountDownLatch(SIZE); for(int i=0;i<10;i++){ executorService.execute(new WaitingTask(latch)); } for(int i=0;i<SIZE;i++){ executorService.execute(new TaskPortion(latch)); } System.out.println("launched all tasks"); executorService.shutdown(); }}
输出结果:
launched all tasks11 completed7 completed9 completed10 completed5 completed8 completed12 completed1 completed13 completed2 completed14 completed17 completed6 completed4 completed0 completed19 completed15 completed18 completed3 completed16 completedlatch barrier passed for Waitingtask 1 latch barrier passed for Waitingtask 0 latch barrier passed for Waitingtask 2 latch barrier passed for Waitingtask 3 latch barrier passed for Waitingtask 4 latch barrier passed for Waitingtask 5 latch barrier passed for Waitingtask 6 latch barrier passed for Waitingtask 7 latch barrier passed for Waitingtask 8 latch barrier passed for Waitingtask 9
0 0
- Java之CountDownLatch使用
- java CountDownLatch使用
- java CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- CountDownLatch的使用 Java
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java之CountDownLatch使用
- Java CountDownLatch类的使用
- 这里有一份面筋请查收(七)
- vps centos6搭vpn
- 函数后面 加上const
- Git工作流程
- tomcat 之memory leak== registered the jdbc driver com mysql jdbc driver
- java CountDownLatch使用
- binsearch 函数的解释说明。
- map使用方法更新
- C++类中的static数据成员,static成员函数
- MySql之分页优化
- java内存模型:volatile变量、与synchronized
- 【译】你想知道的关于JavaScript作用域的一切
- java中的原子操作类AtomicInteger及其实现原理
- ubuntu 16.04 vim文本编辑器的使用方法