Semaphore
- Semaphore信号量维护一个许可集,每次使用时执行acquire()从Semaphore获取许可,如果没有则阻塞,每次使用完执行release()释放许可。
- 使用场景:Semaphore对用于对资源的控制,比如数据连接有限,使用Semaphore限制访问数据库的线程数。
一、Semaphore的使用:
public void latch() throws InterruptedException,IOException{
int count = 5;
Semaphore semaphore = new Semaphore(1);
ExecutorService executorService = Executors.newFixedThreadPool(count);
for(int x = 0;x < count;x++){
executorService.execute(new Worker(x,semaphore));
}
System.in.read();
}
class Worker extends Thread{
Integer start;
Semaphore semaphore;
public Worker(Integer start,Semaphore semaphore){
this.start = start;
this.semaphore = semaphore;
}
@Override\
public void run() throws IllegalArgumentException{
try{
System.out.println(start+"准备执行");
TimeUnit.SECONDS.sleep(1);
semaphore.acquire();
System,out.println(start+"已经执行");
semaphore.release();
System.out.println(start+"已经释放");
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*
0 准备执行
2 准备执行
1 准备执行
3 准备执行
4 准备执行
2 已经执行
2 已经释放
4 已经执行
4 已经释放
1 已经执行
1 已经释放
0 已经执行
0 已经释放
3 已经执行
3 已经释放
*/
更多java基础总结(适合于java基础学习、java面试常规题):
总结篇(9)---字符串及基本类 (1)字符串及基本类之基本数据类型
总结篇(10)---字符串及基本类 (2)字符串及基本类之java中公共方法及操作
总结篇(12)---字符串及基本类 (4)Integer对象
总结篇(14)---JVM(java虚拟机) (1)JVM虚拟机概括
总结篇(15)---JVM(java虚拟机) (2)类加载器
总结篇(16)---JVM(java虚拟机) (3)运行时数据区
总结篇(17)---JVM(java虚拟机) (4)垃圾回收
总结篇(18)---JVM(java虚拟机) (5)垃圾回收算法
总结篇(19)---JVM(java虚拟机) (6)JVM调优
总结篇(24)---Java线程及其相关(2)多线程及其问题
总结篇(25)---Java线程及其相关(3)线程池及其问题
总结篇(26)---Java线程及其相关(4)ThreadLocal
总结篇(27)---Java并发及锁(1)Synchronized
总结篇(31)---JUC工具类(1)CountDownLatch
Semaphore信号量在Java中用于资源控制,限制并发访问的线程数量。本文通过一个示例展示了如何创建和使用Semaphore,限制了数据库连接池的线程数,确保线程安全。此外,还提供了Java并发编程系列的其他知识点总结,包括多线程、锁机制等。
615

被折叠的 条评论
为什么被折叠?



