【问题标题】:Is it ok to use static Latch or Semaphore?使用静态锁存器或信号量可以吗?
【发布时间】:2012-09-06 07:56:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 理论上你所做的一切都可以工作 - 很难说为什么它没有看到一些代码。

标签: java multithreading semaphore countdownlatch


【解决方案1】:

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

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

更多信息Here。示例Here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多