2012-09-06 22 views
0

我有一些实现Runnable接口的类。它们中的每一个都是通过单独的SingleThreadExecutor执行的。我无法修改执行例程,我只能为它提供不同的Runnable。可以使用静态闩锁或信号量吗?

我需要根据其他Runnables结果对Runnables进行一些操作。即我只想在run()方法内部运行一些操作,以防其他所有Runnable都到达该执行点。 或者说,我要运行一些日常运行(内部)方法只有当正在做同样的Runnable的数量少于10

我看到的唯一的解决办法是让一个静态变量CountDownLatch和信号量同步。

我实现了这个,但由于某些未知的原因,从某些Runnable SingleThreadExecutor开始,如果某些Runnables正在等待Latch或Semaphore,那么它将不会启动具有下一个Runnable的线程。例如7个Runnables启动,其他则不启动。

我的问题:我的静态锁存器或信号量同步方案是否正确?

+0

从理论上讲,你的工作可以起作用 - 很难说为什么它没有看到一些代码。 – assylias

回答

0

CyclicBarrier通常比在箱子CountDownLatch更加有用:

  1. 多线程操作,阶段或迭代中,并发生;
  2. 例如,在阶段/迭代之间需要单线程操作,以合并先前多线程的部分的结果 。

更多信息Here。示例Here

相关问题