Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。
Semaphore的主要方法摘要:
void acquire():从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。
void release():释放一个许可,将其返回给信号量。
int availablePermits():返回此信号量中当前可用的许可数。
boolean hasQueuedThreads():查询是否有线程正在等待获取。
示例:
// 设置全局变量
private Semaphore sp = new Semaphore(2);
// 方法
public void method(){
int availablePermits = sp.availablePermits();
if (availablePermits < 1) {
log.error("超限了不能执行");
}
try {
// 获得许可,信号量减1
sp.acquire();
..........
} catch (Exception e) {
} finally {
// 释放许可,信号量加1
sp.release();
}
}
参考:
本文介绍了Semaphore的基本概念和主要方法,包括acquire、release等,并通过示例代码展示了如何使用Semaphore来控制同一时间访问资源的线程数量。
5214

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



