0

我有一些实现 Runnable 接口的类。它们中的每一个都通过单独的 SingleThreadExecutor 执行。我无法修改执行例程,我只能为其提供不同的 Runnables。

我需要根据其他 Runnables 结果对 Runnables 进行一些操作。即,我想在 run() 方法中运行一些操作,以防所有其他 Runnables 都达到该执行点。或者,仅当执行相同操作的 Runnable 数量小于 10 时,我才想在 run() 方法中运行一些例程。

我看到的唯一解决方案是使静态变量 CountDownLatch 和 Semaphore 同步。

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

我的问题:我在静态 Latch 或 Semaphore 上同步的方案是否正确?

4

1 回答 1

0

CyclicBarrier通常比以下情况更有用CountDownLatch

  1. 多线程操作分阶段或迭代发生,并且;
  2. 阶段/迭代之间需要单线程操作,例如,将前一个多线程部分的结果组合起来。

更多信息在这里。示例在这里

于 2012-09-06T07:59:10.403 回答