[英]Is it bad practice to use .wait() and .notifyAll in this circumstance
首先,我正在使用Java 8。
我有一個異步任務,該任務會產生以下結果:
class Result {
private AtomicBoolean isComplete = new AtomicBoolean(false)
private Queue<String> state = new ConcurrentLinkedQueue<>();
public Queue<String> getState() {
return state;
}
public void setComplete() {
isComplete.set(true);
notifyAll();
}
public void waitUntilComplete() {
if (isComplete.get()) {
return;
}
wait();
}
}
我想有選擇性地阻止,直到任務完成。 我正在考慮只使用.wait()
和.notifyAll()
。
我無法使用Future,因為我在任務執行期間確實訪問了當前狀態。
鑒於以下情況,這是不好的做法嗎?
.wait()
和.notifyAll()
是Object.class
上的公共方法。 據我所知,如果正確使用了wait
, notify
和notifyAll
方法,這不是一個壞習慣。 看來您沒有正確使用它們。 顯然,您不清楚要實現什么或如何實現(通過使用這些方法)。
我認為您需要遵循以下原則(以下代碼)。
此外,它似乎不是LOCK
則可以使用this
太(你的情況)。
因此,您可以使整個兩種方法synchronized
(其隱含裝置synchronized
的監視器上this
)。
class Result {
private boolean isComplete = false;
private static final Object LOCK = new Object();
public void setComplete() {
synchronized(LOCK){
isComplete = true;
LOCK.notifyAll();
}
}
public void waitUntilComplete() {
synchronized(LOCK){
while (!isComplete) {
LOCK.wait();
}
// do what you need to do when
// complete is already equal to true
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.