2013-12-18 221 views
0

我正在使用ExecutorService来启动多个线程。JAVA线程并发

  • 线程A
  • 线程B
  • 线程C- 和
  • 螺纹d
  • ....
  • .... 螺纹Ñ

所有线程同时开始。 我正在使用ConcurrentHashMap来存储线程D将来可以使用的线程A,线程B,线程C的结果。

现在可能发生线程A仍在执行时线d正在寻找从线程A输出

这适用于这可能是依赖于线d的输出线程C-

这可能是依赖于任何线程的输出像螺纹N-1,或螺纹或螺纹ňN- 4等等

什么可能是最好的办法来处理这种情况,或使线程A等待,直到其他线程准备就绪输出

+0

我假设你想让线程D等待给定的输出线程A正在产生输出。 –

+2

就个人而言,我可能会在'A'作为'A'的一部分完成后启动'D'。但是,如果我没有记错,'未来#GET'被拦截... – MadProgrammer

+0

我MadProgrammer同意,把d睡眠,有一个通知它是这个一个完全有效的方式。 – nevets1219

回答

1

我建议有三个任务产生排队到同一个执行者或另一个执行者的结果。这样,线程D只有在需要做什么时才能工作。

一个更好的选择可能是线程A立即处理自己的工作(和相同的线程B & C)在这种情况下,你不需要线程D.

0

听起来像是你要使用加盟。启动后加入线程将有效地使您的程序运行在Liniear方式下。线程A运行,然后B,然后C,然后D将在线程C完成后查找前3个线程的结果。

+0

如果你要做到这一点,为什么不直接调用函数A(),B(),C()和d()依次完全避免线程? –

+0

我同意,但你可能希望更多的线程在未来完成类似的任务,同时仍然有D收集结果。 – Slihp