在Java中,有以下幾種導致線程阻塞的方法:
sleep方法:調用Thread類的sleep方法可以使線程暫停執行一段時間,期間不會釋放鎖資源,其他線程也無法獲得該鎖。
wait方法:調用Object類的wait方法會使線程進入等待狀態,并釋放持有的鎖資源,直到被喚醒或者超時才能繼續執行。
join方法:調用Thread類的join方法可以讓一個線程等待另一個線程執行完畢,直到該線程執行完畢才能繼續執行。
synchronized關鍵字:使用synchronized關鍵字修飾的方法或代碼塊會獲取對象的鎖資源,其他線程在獲取該鎖之前會被阻塞。
wait/notify機制:通過調用Object類的wait和notify/notifyAll方法實現線程間的等待和喚醒,當線程調用wait方法時會釋放持有的鎖資源并進入等待狀態,直到其他線程調用notify/notifyAll方法喚醒它。
I/O操作:當線程進行I/O操作時,如果讀/寫的資源未就緒,線程會被阻塞,直到資源就緒才能繼續執行。
Lock/Condition機制:使用Lock和Condition接口的lock和await方法可以實現線程的等待和喚醒,類似于wait/notify機制。
CountDownLatch類:使用CountDownLatch類可以實現線程的等待和喚醒,通過調用await方法使線程等待指定數量的線程完成任務后才能繼續執行。