并发(一) Semaphore
2024-08-25 17:01:59
Semaphore
控制对资源的并发访问数,构造时如果传参为1,则近似于ReentrantLock,差别在于锁的释放。可以一个线程获取锁,另外一个线程释放锁,在一些死锁处理的场合比较适用。
如上所示,信号量为4,当超过4个并发试图访问共享资源时,多出来的线程(红色部分)会被阻塞,直至有线程释放信号量。
使用示例如下:
@Test
public void test1() {
final Semaphore semaphore = new Semaphore(2);
ExecutorService executorService = Executors.newCachedThreadPool(); final AtomicInteger executeNums = new AtomicInteger();
for(int num = 0; num < 20; num++) {
executorService.execute(new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();
System.err.println("thread-" + Thread.currentThread().getId());
Thread.sleep(1000);
executeNums.incrementAndGet();
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
} while (executeNums.get() < 20) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
executorService.shutdown();
}
最新文章
- Promise编程基础
- eclipse + maven 搭建springMVC+Spring+mybatis 系统
- 阿里云:linux 一键安装web环境
- UVa 10837 A Research Problem 欧拉函数
- Python学习笔记4(函数与模块)
- <; high performance web sites >; 阅读小记
- 什么是Java Bean
- 微信自定义菜单errcode(40016)
- 从 PC 卸载 Office
- oracle中的日期函数的使用
- 498. Diagonal Traverse对角线z型traverse
- 跟着未名学Office - 高效工作Outlook
- windows 下跟踪日志的几个工具总结
- 函数参数,const 引用 和 非 const引用是不同的函数。
- FortiGate软件版本升级
- string+和stringbuffer的速度比较
- json字符串和Json对象,以及json的基本了解
- Oracle 分析函数及常用函数
- css3代码整理—弹性盒子篇
- 从0开始 图论学习 邻接表 STL vector