Semaphore该类用于控制信号量的个数,可以控制同时访问资源的线程个数,并提供了同步机制 。例如,实现一个文件允许的并发访问数 。
Semaphore 的主要方法:
- acquire():从此信号量中获取一个许可,若已超过许可量,则阻塞此请求线程 。
- release():释放一个许可,将其返回给信号量 。
- availablePermits():返回此信号量中当前可用的许可数 。
- hasQueuedThreads():查询是否有线程正在等待获取 。
package test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class Test { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final Semaphore sp = new Semaphore(3); // 创建 Semaphore 信号量,初始化许可大小为3 for (int i = 0; i < 10; i++) { try { Thread.sleep(100); }catch (InterruptedException e){ e.printStackTrace(); } Runnable runnable = new Runnable() { @Override public void run() { try { sp.acquire(); // 请求获取许可,如果有可获取许可,则继续往下指向,许可数减一 。 } catch (InterruptedException e){ e.printStackTrace(); } System.out.println("线程" + Thread.currentThread().getName() + "进入,当前已有" + (3 - sp.availablePermits()) + "个并发") ; try{ Thread.sleep((long)(Math.random() * 10000)); }catch (InterruptedException e){ e.printStackTrace(); } System.out.println("线程" + Thread.currentThread().getName() + "即将离开"); sp.release(); // 释放许可证,许可数+1 } }; service.execute(runnable); } }}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 菊花茶的好处,菊花茶有哪些好处
- 水鬼是什么样的 水鬼长啥样真实的
- PS制作出有纹理的背景素材
- 古代最常用的兵器 中国古代有名的兵器
- 这9个程序员工具网站,太牛了吧
- 常喝人参泡水的好处,人参泡水的大好处
- 百香果花茶的做法,百香果茶的做法种常见百香果饮品做法
- 男生粘人的心理原因是什么?
- 蛋皮经常痒是怎么回事?
- 常喝杨梅酒好处和坏处 喝杨梅酒好吗
