2011-03-17 28 views
10

有什麼辦法來檢查給定線程是否正在睡眠?如何檢查線程是否正在睡眠?

+2

敢問你爲什麼需要這些信息? – 2011-03-17 08:45:51

+0

是從您的代碼中調用的Thread.sleep()。知道線程正在睡覺你想實現什麼? – 2011-03-17 08:57:44

回答

16

您可以打電話Thread.getState()並檢查狀態是否爲TIMED_WAITING

但請注意,TIMED_WAITING並不一定意味着線程調用sleep(),它也可以在一個Object.wait(long)呼叫或類似的東西在等待。

+0

關於時間的任何想法(如何)長線程在等待? – 2015-12-23 12:06:09

0

我不確定是否有更好的方法,但當線程進入休眠狀態時可以更改變量,並在線程正在休眠時檢查該變量。

0

你可以創建自己的睡眠方法,其中記錄了線程的ID全局變量,並用它作爲休眠線程參考。

沒有其他方法可以判斷線程是否正在睡眠。

希望三通以下幫助:

3

這裏是一個相當醜陋的黑客來檢查,如果其他線程處於休眠狀態:

+0

ParkSupport/Unsafe.park也讓線程睡覺 – bestsss 2011-03-19 13:53:29

+0

什麼是ParkSupport和Unsafe.park? – aioobe 2011-03-19 22:54:05

+0

doh我總是把「java.util.concurrent.locks.LockSupport」誤認爲「ParkSupport」; impl本身就在sun.misc.Unsafe.park – bestsss 2011-03-19 23:02:44