gpt4 book ai didi

java - 信号量如何以及为什么可以发出比初始化时更多的许可?

转载 作者:搜寻专家 更新时间:2023-10-30 21:44:43 24 4
gpt4 key购买 nike

我正在阅读《Java 并发实践》一书。在关于 java.util.concurrent.Semaphore 的章节中,以下几行出现在本书中。是对其实现“虚拟许可”对象的评论

The implementation has no actual permit objects, and Semaphore does not associate dispensed permits with threads, so a permit acquired in one thread can be released from another thread. You can think of acquire as consuming a permit and release as creating one; a Semaphore is not limited to the number of permits it was created with.

谁能解释一下?我无法理解这一点。如果我们创建一个固定大小的池,我们将创建一个固定数量的“许可”。从上面的说法来看,“许可证”似乎还能继续增长。为什么要这样设计?

最佳答案

该实现没有“分发”许可对象,而是只有一个计数器。当“创建”新许可时,计数器增加,当“返回”许可时,计数器减少。

这比一直创建实际对象的性能要好得多。

权衡是信号量本身无法检测某些类型的编程错误(例如未经授权的许可证兑现或信号量泄漏)。作为编码人员,您必须确保自己遵守规则。

关于java - 信号量如何以及为什么可以发出比初始化时更多的许可?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7554839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com