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();
}
}
参考: