gpt4 book ai didi

java - 条件等待

转载 作者:行者123 更新时间:2023-11-30 06:19:58 25 4
gpt4 key购买 nike

我有以下类使用 synchronized 来尝试在 key 生成之前阻止对其的访问:

public class KeyManager {

private String key;

public KeyManager() {
genKey();
}

private void genKey() {
new Thread(new Runnable() {
synchronized(KeyManager.this) {
public void run() {
key = operationThatTakesALongTime();
}
}
}).start();
}

synchronized public String getKey() {
return key;
}

}

问题是 getKey() 有时会在内部线程之前被调用,它会先获取锁。

我真正需要的是在 getKey() 中等待,仅当 key 为空时才等待。如何做到这一点?

最佳答案

synchronized public long getKey() 
{
while (key == null)
{
try
{
wait();
}
catch(InterruptedException e)
{
/* handle here */
}
}
return key;
}

wait 会让线程释放锁,然后在调用 notify 时可以再次获取它。如果 key 仍然为空,它将再次释放锁。

但我认为这不是最好的方法。

它抛出 InterruptedException

关于java - 条件等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22463266/

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