在Thinking in Java中寫道Thread.interrupt()
不能中斷試圖獲取同步鎖的線程,我想知道爲什麼?爲什麼Thread.interrupt()不能中斷試圖獲取鎖的線程
5
A
回答
6
阻塞操作只有在聲明爲拋出InterruptedException
時纔會中斷。顯然,塊沒有聲明它,因此在等待獲取鎖的時候不可能中斷一個線程。
或者,您可以使用明確的鎖定並致電Lock.lockInterruptibly()
。
1
這本書是錯誤的,除非它僅指關鍵字。 Object.wait()
投擲InterruptedException
。
相關問題
- 1. 未能獲取鎖的線程會發生什麼情況?
- 2. 爲什麼task1線程不會中斷
- 3. Thread.interrupt()不工作後中斷
- 4. ReentrantReadWriteLock - 爲什麼讀者不能獲取作家的鎖?
- 5. 爲什麼AbstractQueuedSynchronizer的中斷上acquring鎖
- 6. 線程試圖獲取pthread_mutex_lock(&mutex)如果他們沒有獲取鎖,會發生什麼?
- 7. 當某個線程調用Thread.interrupt()時,會發生什麼?
- 8. 爲什麼要做Thread.interrupt()拋出IllegalThreadStateException?
- 9. 爲什麼我不能啓動線程
- 10. 爲什麼一個線程會中斷另一個線程
- 11. 爲什麼鎖不鎖?
- 12. pthread互斥鎖解鎖爲什麼一樣的線程?
- 13. 爲什麼鎖定可能會成爲多線程程序的瓶頸?
- 14. 爲什麼在調試主線程時工作線程不能執行?
- 15. 爲什麼__LINE__在這個Perl單線程中不斷摺疊?
- 16. 線程中斷()不會中斷線程
- 17. 爲什麼我的中斷處理程序不能觸發?
- 18. 爲什麼我不能獲取queryString?
- 19. 爲什麼不能使用UI線程訪問視圖的線程?
- 20. 爲什麼Mutex不能解鎖?
- 21. 什麼決定了兩個競爭線程中的哪一個獲取鎖?
- 22. 如果線程試圖獲取它已經擁有的鎖,會發生什麼情況?
- 23. 爲什麼我的wordpress主題不能獲取背景圖片?
- 24. 爲什麼我不能讀取圖像?
- 25. 獲取等待聯鎖的線程數
- 26. 爲什麼發生死鎖?難道你不能在程序中釋放鎖嗎?
- 27. 爲什麼我不能讀取遠程
- 28. 爲每個圖動作獲取了什麼鎖
- 29. 爲什麼應用程序在線setVisibility(View.GONE)中的onCreate()中斷?
- 30. 我們可以中斷已獲得鎖定的線程嗎?
它可以中斷線程。例如,線程在中斷時不會停止等待同步鎖定,因爲它會(如通過拋出InterruptedException)休眠。但是如果線程獲得了鎖,那麼檢查它是否中斷,它會是。 –
在一個設計良好的程序中,沒有線程永遠持有鎖的時間超過檢查和更新一些變量所需的時間。應該不需要中斷來「喚醒」待處理的同步塊。如果你認爲我錯了,並且你的程序真的需要這個能力,那麼考慮使用'java.util.concurrent.locks.ReentrantLock'而不是'synchronized'。 'reentrantLock.tryLock(time,unit)'方法_can_可以被中斷。 –