可以使用静态Latch或Semaphore吗?

时间:2012-09-06 07:56:11

标签: java multithreading semaphore countdownlatch

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 多阶段操作分阶段或迭代,并且;;
  2. 阶段/迭代之间需要单线程操作, 例如,组合前一个多线程的结果 部分。
  3. 更多信息Here。示例Here