我想了解中斷如何與Thread.sleep()和Thread.join()一起工作。如何中斷和Thread.sleep()/ Thread.join()動作
例如,如果在一個線程,說t1
,我執行Thread.sleep()
後從另一個線程我叫t1.interrupt()
然後Thread.sleep()
拋出和InterruptException。
我想知道的是這一切的機制。正如我所看到的sleep()
是一個靜態方法,它如何檢測到中斷已發送到它所調用的線程?
對於案例t1.join()
類似,該方法如何看到執行ti.join()
的線程已收到中斷並拋出異常?有沒有一種聯繫?
考慮到這是實施和特定平臺,您希望從答案中獲得哪些洞察?這怎麼幫助你解決一些編程問題?即你的問題的根本動機是什麼。 – the8472
sleep是靜態的,因爲它只在當前運行的線程上調用它纔有意義。當您查看Thread的源代碼時,可以看到像sleep和wait這樣的方法是本地方法。情況就是這樣,因爲os處理線程(如果它們是本地的,它們在java中)。所以基本上如果oyu調用中斷,java會將該中斷重定向到os,然後os會喚醒線程,然後java拋出異常。 –
「本地方法」是什麼意思?然而,我不明白的是,Thread.sleep如何理解哪個線程進入睡眠狀態,以及如何提取這些信息。 – zer0uno