從多重編程通過赫利希藝術:爲什麼一個線程在拿到鎖的同時測試一個條件/屬性,而不是在獲取鎖之前?
假設一個線程 要等到一定的屬性保存。 線程測試屬性,而 持有鎖。如果該屬性不成立,則線程調用await()至 釋放該鎖並休眠,直到被另一個線程喚醒。
1 Condition condition = mutex.newCondition(); 2 ... 3 mutex.lock() 4 try { 5 while (!property) { // not happy 6 condition.await(); // wait for property 7 } catch (InterruptedException e) { 8 ... // application-dependent response 9 } 10 ... // happy: property must hold 11 }
圖8.2如何使用Condition對象。
爲什麼線程調用mutex.lock()
它測試的屬性(如果該屬性不成立,線程調用await()
),而不是前後?
謝謝。
因爲屬性可以在檢查和鎖定之間改變。 – shmosel