信号量介绍以及一个实例
信号量参考文章:
https://blog.csdn.net/hanchao5272/article/details/79780045
Semaphore semaphore = new Semaphore(1); // 保证只有一个线程进行操作
// 确保同一时刻仅有一个线程能向队列中加入元素,从而保证list的线程安全,但是牺牲了并发量
public <T> boolean addTask(T element) {
try {
if(element != null) {
boolean b = semaphore.tryAcquire(1, TimeUnit.SECONDS);
operationLogExportTaskQueue.add(element);
if (b) {
AuditQueue.getInstance().start();
notifyObservers();
}
return b;
}
return false;
} catch (InterruptedException e) {
return false;
}
}
public void release() {
semaphore.release();
}
https://blog.csdn.net/yinwenjie/article/details/85105788
AQS与信号量有很多重叠部分