初识java.util.concurrent.CountDownLatch

原创 2016年06月01日 16:17:32
package learn;


import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class CountDown {
public static int num = 10;
public static void main(String[] args) throws InterruptedException {
//所有任务线程执行结束信号
CountDownLatch doneSignal = new CountDownLatch(num);
//任务执行信号
CountDownLatch startSignal = new CountDownLatch(1);

ExecutorService service = Executors.newCachedThreadPool();
for (int i = 1; i <= num; i++)
{
service.submit(new Worker(doneSignal, startSignal, i));
}

System.out.println("begin ***********************");
//任务开始执行
startSignal.countDown();
//等待所有任务执行结束
doneSignal.await();
service.shutdown();
System.out.println("Done ***********************");
}

static class Worker implements Callable<Object>
{
private CountDownLatch doneSignal;
private CountDownLatch startSignal;
private int index;


Worker(CountDownLatch doneSignal, CountDownLatch startSignal, int index)
{
this.doneSignal = doneSignal;
this.startSignal = startSignal;
this.index = index;
}

@Override
public Object call() 
{
try 
{
//等待任务执行信号
startSignal.await();
for (int i = (index - 1) * 10 + 1; i <= index * 10; i++)
{
System.out.println("worker(" + index + ") print " + i);
}

catch (InterruptedException e) {
e.printStackTrace();
}
finally
{
//任务执行结束信号
doneSignal.countDown();
}

return null;
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java.util.concurrent之CountDownLatch

CountDownLatch可用于管理一组线程,适用于将一个任务分成若干线程执行,等到所有线程执行完,再进行汇总处理。  package test; import java.util.concur...

java.util.concurrent包图文源码解析(一)——CountDownLatch

好久没有写博客了,四个字:贵在坚持!!! 从今天起,每天至少一篇。 从JAVA并发开始,所有的博文都结合源码,什么事情知道原理,得心应手。 java.util.concurrent包是线程控制框...

java.util.concurrent.CountDownLatch类详解及例子

从名字可以看出,CountDownLatch是一个倒数计数的锁,当倒数到0时触发事件,也就是开锁,其他人就可以进入了。在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也...
  • rj042
  • rj042
  • 2011-06-20 14:07
  • 3380

聊聊高并发(二十六)解析java.util.concurrent各个组件(八) 理解CountDownLatch闭锁

CountDownLatch闭锁也是基于AQS实现的一种同步器,它表示了“所有线程都等待,直到锁打开才继续执行”的含义。它和Semaphore的语意不同, Semaphore的获取和释放操作都会修改状...

java.util.concurrent|CountDownLatch使用

CountDownLatch能实现让一个线程等待其他线程执行完成后再继续执行的功能。 如下使用CountDownLatch实现服务检测功能,ApplicationStartupUtil调用服务的检测...

java.util.concurrent包详解:CyclicBarrier和CountDownLatch

CountDownLatch是减计数方式,计数==0时释放所有等待的线程;CountDownLatch当计数到0时,计数无法被重置;CountDownLatch每次调用countDown()方法计数减...

深入分析java.util.concurrent并发包下的CountDownLatch.java

CountDownLatch被称为并发包下的计数器或者闭锁。闭锁,也被称为开关,它允许在一个任务完成之前,一个或者一组线程处于等待状态;当闭锁失效时,这些线程将被唤醒执行自己的任务。计数器,它允许将一...

Java并发包concurrent之CountDownLatch

CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。换句话说,你可以并行的执行一段代码,并设置等待所有的线程都执行完的点,然后再一起开始...

java_util_concurrent中文指南

  • 2017-09-06 15:39
  • 617KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)