0
コード1:java無限の待ち問題?
class BCWCExamples {
public Object lock;
boolean someCondition;
public void NoChecking() throws InterruptedException {
synchronized(lock) {
//Defect due to not checking a wait condition at all
lock.wait();
}
}
コード2:
public void IfCheck() throws InterruptedException {
synchronized(lock) {
// Defect due to not checking the wait condition with a loop.
// If the wait is woken up by a spurious wakeup, we may continue
// without someCondition becoming true.
if(!someCondition) {
lock.wait();
}
}
}
コード3:
public void OutsideLockLoop() throws InterruptedException {
// Defect. It is possible for someCondition to become true after
// the check but before acquiring the lock. This would cause this thread
// to wait unnecessarily, potentially for quite a long time.
while(!someCondition) {
synchronized(lock) {
lock.wait();
}
}
}
コード4:
public void Correct() throws InterruptedException {
// Correct checking of the wait condition. The condition is checked
// before waiting inside the locked region, and is rechecked after wait
// returns.
synchronized(lock) {
while(!someCondition) {
lock.wait();
}
}
}
}
注:いくつかの他そこから通知されます場所
ありそう無限の待ち時間があり、コード1のウェイトのための条件はありませんが、無限の待ち時間は他の3のコード(2,3,4)
に発生している理由を親切により良く理解するためにコード内のコメントをご確認ください親切に私を助けてください私はJavaで新しいです通知して通知する
が、これは、関連するコードのentireityですか?値someConditionは決してtrueに設定されません –