2016-08-15 52 views
0

但有2個線程:AB。我想:如何在Java中監視線程的狀態?

  1. 如果A切換到休眠狀態,然後B開關睡覺了。

  2. 如果A清醒,那麼B也是清醒的。

有沒有一種方法來實現呢?

+5

'A'如何切換到睡眠狀態?如果你的意思是當'A'正常產出或在多任務過程中被先發制人時,你無法知道這一點。在多核機器上,它可能永遠不會屈服。 –

+2

以下是線程狀態,您需要清楚它是哪個狀態以及它是如何到達該狀態的?新的,運行的,阻塞的,等待的,TIMED_WAITING的,終止的 – ravthiru

+1

當他們沒有睡覺或彼此觀察時,這些線程在做什麼? – EJP

回答

0

如果您需要同步這些線程,則可以使用CyclicBarier。

這是一個線程等待的barier。它的工作原理是線程正在等待它,如果等待線程的數量達到指定的數量,那麼它將喚醒所有線程並繼續工作。因此,這是一種同步一堆線程的方法,可以一步完成,然後等待對方完成此步驟,然後再執行下一步驟。

0

不是直接。睡眠和喚醒不是用戶代碼有機會響應的線程上的生命週期事件。沒有辦法在另一個線程上調用Thread.sleep()Thread.wake(),因爲剩餘的不被棄用的線程操作只能在當前線程上運行。

更明確地表示線程AB所完成的工作之間的關係,例如對於隊列。線程A消耗隊列中的工作,然後將結果放入由線程B消耗的隊列中。當有工作時,兩個線程都在工作,當沒有工作時,兩個線程都在休眠。