gpt4 book ai didi

java - 如何实现信号量

转载 作者:行者123 更新时间:2023-11-30 07:02:53 27 4
gpt4 key购买 nike

我正在浏览 this链接,这里给出了计数信号量的实现:

public class CountingSemaphore {
private int signals = 0;

public synchronized void take() {
this.signals++;
this.notify();
}

public synchronized void release() throws InterruptedException{
while(this.signals == 0) wait();
this.signals--;
}

}

我无法理解。在take()方法中调用notify,让其他线程进入section。take方法里面不应该有wait。请帮助我理解。

谢谢

亚延德拉

最佳答案

那篇文章的第一条评论指出:

Don't you have "take" and "release" reversed?

作者承认

You are right, that should probably have been reversed.

所以,是的,it seems the article got things mixed up a bit .

如果你只是切换这两种方法,它可能会起作用。

然而,在现实生活中,JDK 现在在 concurrency utils 包中有信号量,您应该使用它们。

至于了解事物是如何工作的,首先查看 JDK 源代码可能有点挑战(但在您达到初步理解后阅读是非常好的)。最好找一篇更好的文章。

关于java - 如何实现信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28807398/

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