多线程并发控制CountDownLatch和CyclicBarrier和Semaphore
来源:互联网 发布:淘宝确认收货时间 编辑:程序博客网 时间:2024/06/06 18:44
CountDownLatch:利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。
CyclicBarrier:字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。
Semaphore:翻译成字面意思为 信号量,Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
相同点
都位于java.util.concurrent包下
构造函数都需要指定多少个同步资源:
public
CountDownLatch(
int
count) { };
//参数count为计数值
public
CyclicBarrier(
int
parties)
public
Semaphore(
int
permits) {
//参数permits表示许可数目,即同时可以允许多少线程进行访问
接口使用也差不多
举例CountDownLatch
public
void
await()
throws
InterruptedException { };
//调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行
public
boolean
await(
long
timeout, TimeUnit unit)
throws
InterruptedException { };
//和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
public
void
countDown() { };
//将count值减1
都是要手动lock,然后完成工作后unlock
不同点:
应用上有差别,如图示
欢迎感兴趣的码农关注我,目前研究方向为:搜索,智能问答等方向
阅读全文
0 0
- 多线程并发控制CountDownLatch和CyclicBarrier和Semaphore
- 并发控制:CountDownLatch、CyclicBarrier和Semaphore详解
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发之CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java 逆变与协变
- Example 8.2 Mountain–Car Task
- markdown练习
- SELECT DISTINCT 语句
- properties.getPropety
- 多线程并发控制CountDownLatch和CyclicBarrier和Semaphore
- Java设计模式学习笔记3
- springMVC中ajax数组传值报400或者415错误
- quartz详解2:quartz由浅入深
- hdu 1517 A Multiplication Game(规律)
- 【数据结构与算法】ip转int
- 51nod 1103 N的倍数(抽屉原理)
- 原码,反码,补码详解及 Java中>>和>>>的区别
- eclipse Select Dependency窗口添加依赖无法检索