Vin*_*C M 10 java concurrency multithreading semaphore
我正在阅读Java Concurrency in Practice一书.在一节java.util.concurrent.Semaphore中,书中有以下几行.它是关于其"虚拟许可"对象的实现的评论
该实现没有实际的许可对象,
Semaphore也没有将分配的许可与线程相关联,因此在一个线程中获得的许可可以从另一个线程中释放.您可以将其acquire视为消费许可和release创建许可; aSemaphore不限于创建它的许可数量.
有人可以解释一下吗?我无法理解这一点.如果我们创建一个固定大小的池,我们会创建固定数量的"许可".从上面的陈述看,"许可证"似乎可以继续增长.为什么这样设计?
实现只是有一个计数器,而不是"分发"许可对象.当"创建"新许可证时,计数器增加,当许可证"返回"时,计数器减少.
这比始终创建实际对象的性能要好得多.
权衡是信号量本身无法检测某些类型的编程错误(例如未经授权的许可证现金或信号量泄漏).作为编码员,你必须确保自己遵守规则.
小智 5
我认为这意味着我们可能需要 Semaphore 的时间作为我们发布“额外”的时间以及它创建的许可。
如:
Semaphore s = new Semaphore(1); // one permit when initialize
s.acquire();
s.release();
s.release(); // "extra" release.
Run Code Online (Sandbox Code Playgroud)
此时,该信号量允许一个原始许可和一个“额外”许可
| 归档时间: |
|
| 查看次数: |
9532 次 |
| 最近记录: |