2016-08-15 62 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消耗的队列中。当有工作时,两个线程都在工作,当没有工作时,两个线程都在休眠。