0
我正在閱讀一本java 6書。示例代碼段來自主題章節,在這裏我需要澄清等待之後不應該處於阻塞狀態而不是可運行狀態?
synchronized(a){ //The thread gets the lock on 'a'
a.wait(2000);// Thread releases the lock and waits for notify only for maximum of two seconds, then goes back to runnable state
//The thread reacquires the lock
//More instructions here
}
現在我的疑問是,2秒的等待時間之後,繼續進一步執行代碼下面給出,上面的代碼將要求對象的鎖'a',並且另一個線程(應該調用a)上的notify()可能已經在鎖定它了。
因此,不應該在等待2秒鐘之後線程進入阻塞狀態,而不是像上面在註釋中所述的運行狀態(在第2行中)。
在上述語句中,它表示」啓用線程調度「,這意味着它現在處於Runnable狀態。對? 但是,下一行指出現在它完成與其他線程權限同步(即獲得鎖) - 那麼這將意味着線程在 - 鎖定狀態的對象鎖 那麼哪一個是正確的?它處於可運行狀態還是處於阻塞狀態? 如果我在任何地方都錯了,請糾正我。 – Harish 2009-11-15 20:03:17
如果沒有其他線程擁有鎖定,它將可以運行,但如果有其他鎖定,則必須像其他人一樣等待。你應該寫一些測試來進一步探索這種行爲。 – 2009-11-15 20:51:59
感謝這個信息。我會按照建議嘗試一些例子 – Harish 2009-11-15 21:58:12