2015-12-12 106 views
0

我有n线程正在执行(线程数组),并且在它们中的每一个线程中,我需要根据其他线程的结果进行一些计算。我如何在一个线程中等待其他线程的结果准备好?如何让一个线程等待另一个线程导致java?

+0

如果有n个线程,并且每个线程都等待n-1个其他线程,则听起来像是有死锁问题。 T1是否需要T2需要T1结果的结果? – ChiefTwoPencils

+1

不要这样做。相反,只要结果准备就绪,请检查是否有其他任何可以做的结果,然后派遣该工作。没有必要有一个线程等待某些事情发生,只是在事情发生时做些事情。 –

回答

0

有两种选择。

1)在线程内部需要等待结果,你可以让它在while循环中休眠。

while(threadResult == null){ 
      this.sleep(your specified amount of time) 
    } 
    // When it finally has a value it will continue. 
    this.value = threadResult; 

2)你可以让你的线程等待,直到其他人通知它。你需要使用他们都有的共同对象,然后等待并睡在另一个对象上。

你的线程中运行的代码,当你需要其他的效果,请使用,

CommonObject.wait(); 

当你的其他线程完成其操作并更新你需要,你会通知共有对象的结果,线程等待会继续其任务。

CommonObject.notify(); 
0

这个问题确实有很多可能的答案。经典之一是使用带有条件变量的锁(Java:​​Object.wait()Object.notify())。

或使用Future<T>CompletableFuture<T>

相关问题