关于许可证数量的问题
来源:10-5 Semaphore用法和注意点

慕标6114981
2020-03-09
悟空老师您好:
学习Semaphore的时候我写了下面的代码
public static void main(String[] args) throws InterruptedException {
Semaphore semaphore = new Semaphore(5);
semaphore.release(4);
new Thread(new Runnable() {
@Override
public void run() {
try {
semaphore.acquire(9);
System.out.println(Thread.currentThread().getName() + "获取到了9个许可证");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
最后的结果是线程能够获取到9个许可证,我查阅了一下相关资料,这种情况是正常的,并且我们可以把acquire理解为消费了一些许可证,release理解为创建了一些许可证,请问这种说法正确吗?另外,如果是这样的话,那么可能会出现许可证越来越多的情况,这种情况应该如何避免?或者说为什么要允许信号量超过初始值呢?是为了程序更加灵活吗?下图是程序的截图。
谢谢
写回答
1回答
-
这个问题我讲过了哈,就在这个小节里,程序并不限制释放许可证,如果符合业务逻辑,那就OK。
允许超过初始值,是为了更灵活,我们避免许可证越来越多的有效手段,就是释放和消费许可证的数量保持一致。但是JDK不会强制要求我们这么做,要靠我们自己了。
112020-03-10
相似问题