2016-08-18 184 views
1

這真是一切的標題。 我知道Thread.sleep()只會讓當前線程進入睡眠狀態,但是有沒有辦法強制所有的線程同時進入休眠狀態,還是會自我管理?有沒有辦法在Java中使所有正在運行的線程sleep()?

+1

每個線程將不得不把自己睡覺。 –

+0

也許這個問題將有所幫助:http://stackoverflow.com/questions/20666454/how-to-pause-all-running-threads-and-then-resume – byxor

+0

您是否嘗試迭代所有正在運行的線程並阻止它們逐個? – Abdo

回答

3

從外部將線程置於睡眠狀態是很危險的,因爲它可以處於某種中間狀態(例如,這就是爲什麼從外部殺死線程不好的原因)。所以請通過自我管理來實現。

+0

如果某個程序的線程正確同步,那麼暫時暫停一個或多個線程可能導致外部代理程序可能造成的最嚴重的危害就是使程序錯過實時期限或無法滿足性能要求。它不會導致數據損壞。即,* IF *程序已正確同步。即使它沒有正確同步,那麼同時在同一時間間隔內暫停其線程也不會造成任何傷害。 –

+1

@ jameslarge你的線程正在控制步進電機。因爲它已經入睡了,它並沒有讓它停下來。它現在撞到了牆上,損壞了設備。不是一個真實的例子?我在C中拋出了一個20K原型,只是出現了這個問題(因爲我有一個調試器,所以線程已經睡了)。它只是因爲它的同步性而不是一般的安全。 –

+0

@GabeSechan,當我說「錯過實時期限」時,這就是我的意思,但我認爲重點出錯了。實時軟件本身就是一個完整的類別。我知道你在說什麼,只是在我的情況下,這是一個內部的牆壁(用一些幹牆,泥土和油漆固定),原型沒有受到傷害。 P.S .:我對機械設計團隊的官方建議是,「我們可以用小型電機來做到這一點。」 –

3

答案很簡單:無法讓所有線程從Java(從應用程序內部)進入休眠狀態。

此外,在Java上,有很多內部線程(如GC線程,Finalization線程,...),您無法操作,因此「all」永遠不可能。

問候,

盧瓦克

相關問題