【发布时间】:2021-04-16 10:21:07
【问题描述】:
在 Semaphore (java.util.concurrent.Semaphore) 的初始化期间,我对负面许可的背后没有理性。
我知道调用 release() 方法最终可能会使 Semaphore 的许可大于等于一 (>=1),以便稍后其他线程可以获得许可。或者稍后在程序执行期间,当更多线程在执行 acquire() 方法时等待许可时,Semaphore 可能有负许可。
但是,我没有得到任何实际的用例来初始化带有负许可的信号量。
示例代码供参考:
import java.util.concurrent.Semaphore;
public class SemaphoreDemo {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
Semaphore s = new Semaphore(-2);
System.out.println(s.availablePermits());
s.release(3); // adding 3 permits
System.out.println(s.availablePermits()); // now it has 1 permit
}
}
【问题讨论】:
-
我从未见过任何数字以外的任何实际用例(这只是一个穷人的
Lock)。真的。我见过的所有例子都是人为的和/或有更好的选择。在这方面,用负百初始化信号量并不比用正百创建信号量差。
标签: java semaphore java.util.concurrent