CycliBarriar和CountdownLatch(计数器)】的更多相关文章

CyclicBarrier可以重复使用,而CountdownLatch不能重复使用. countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行. 是通过一个计数器来实现的,计数器的初始值是线程的数量.通过countDown()来减一,等减到0,await()方法就进入等待run状态. 例子: public static CountDownLatch countDownLatch = new CountDownLatch(3); public static void doCoun…
先来讲解一下Semaphore信号灯的作用:  可以维护当前访问自身的线程个数,并提供了同步机制, 使用semaphore可以控制同时访问资源的线程个数 例如,实现一个文件允许的并发访问数. 请看下面的演示代码: public class SemaphoreTest { public static void main(String[] args) { //创建一个带有缓存的线程池 ExecutorService service = Executors.newCachedThreadPool();…
这里我暂时只讲CountDownLatch的作用和怎么使用,至于他是怎么实现这种功能的,涉及源码,以后我再补上. 正文 什么是CountDownLatch? CountDownLatch是在java1.5被引入,存在于java.util.cucurrent包下.CountDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行. 他是通过一个计数器来实现的,计数器的初始值是线程的数量.每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待…
CyclicBarrier 可以重复使用,而 CountdownLatch 不能重复使用. Java 的 concurrent 包里面的 CountDownLatch 其实可以把它看作一个计数器, 只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器, 也就是同时只能有一个线程去减这个计数器里面的值. 你可以向 CountDownLatch 对象设置一个初始的数字作为计数值,任何调用这个 对象上的 await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为 0 为 止.…
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch import java.util.concurrent.CountDownLatch; public class CountDownLatchTest { //设置N为2 static CountDownLatch c = new CountDownLatch(2); public static v…
CountDownLatch 是一个同步工具类,允许一个线程或者多个线程等待其他线程完成操作,再执行. CountDownLatch(int count) 构造一个用给定计数初始化的 CountDownLatch. // 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断. void await() // 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间. boolean await(long timeout, TimeUnit unit) // 递减锁存器的…
CountDownLatch实际上是一种闭锁实现.闭锁:是一种同步工具类,可以延迟线程的进度知道其到达终止状态--<Java并发编程实战>.这个怎么解释呢?简单来说,就是有1个线程需要等待其余10个线程都执行完毕后再执行,这个时候就可以使用闭锁,也即CountDownLatch(当然闭锁的实现并不止这一种).关于对闭锁的详细解释请参考<Java并发编程实战>P79. CountDownLatch中有一个计数器,该计数器通过构造方法传递,表示需要完成的工作.有两个主要的方法:coun…
线程同步辅助类,主要学习两点: 1.上述几种同步辅助类的作用以及常用的方法 2.适用场景,如果有适当的场景可以用到,那无疑是最好的 semaphore(seməˌfôr) 含义 信号量就是可以声明多把锁(包括一把锁:此时为互斥信号量). 举个例子:一个房间如果只能容纳5个人,多出来的人必须在门外面等着.如何去做呢?一个解决办法就是:房间外面挂着五把钥匙,每进去一个人就取走一把钥匙,没有钥匙的不能进入该房间而是在外面等待.每出来一个人就把钥匙放回原处以方便别人再次进入. 常用方法 acquire(…
CountDownLatch介绍 在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法: 1.synchronized关键字进行同步. 2.Lock锁接口及其实现类ReentrantLock.ReadWriteLock锁实现同步. 3.信号量Semaphore实现同步. 其中,synchronized关键字和Lock锁解决的是多个线程对同一资源的并发访问问题.信号量Semaphore解决的是多副本资源的共享访问问题. 今天,来学习一下Java中的另外一个多线程同步辅助类:Coun…
关于等待状态的线程调用interrupt方法报异常:InterruptedException 当线程被阻塞,比如wait,join,sleep等,在调用interrupt方法,没有占用cpu运行的线程是不可能给自己的中断状态置位的,这就产生了InterruptedException异常. 一.闭锁CountDownLatch(允许一个或多个线程等待其它线程完成操作) 代码实例: package com.thread.ccse; import java.util.concurrent.CountD…