【问题标题】:How to know if a latch finished its task如何知道闩锁是否完成了任务
【发布时间】:2015-05-03 10:19:03
【问题描述】:

我有两个线程,countDownLatch 设置为 1,因此,当第一个线程完成时,第二个线程应该启动。而我想要做的是,当第二个完成它的任务时,我想获取从两个线程计算的数据来做一些操作。

现在我的问题是,有什么方法可以知道CountDownLatch 对象是否完成了它的任务?

更新

使用安全吗

while (latch.getcountDown()==0) {
 // do the calculations on the data processed by the two threads
}

【问题讨论】:

  • 使用thread.notify;也可以使用tutorialspoint.com/java/lang/object_notifyall.htm链接作为参考
  • @SaurabhJhunjhunwala 你的意思是latch.notify吗?你能提供两个例子吗
  • a) 不清楚您所说的“完成任务”是什么意思? CountDownLatch 不执行任何任务。 b) 有什么理由不使用 Executors 和 Futures?看起来像这样的事情的完美工具。
  • @SergeyTachenov 我的意思是,当锁存器最初设置为 1 时,第一个线程将启动并且我调用 latch.countdown()..然后线程 1 调用 .countdown( ) 并且锁存器达到 0。
  • 这正是 Future.get()Future.isDone() 方法的用途。

标签: java multithreading executorservice countdownlatch


【解决方案1】:

是的,当您的线程完成并能够接受请求或特定任务时,它会在闩锁上调用countDown 方法。另一方面,在您的主线程(或您的协调线程)中,阻塞闩锁上的 await 方法。

现在,每当“x”从属线程完成其任务并调用 countDown 时,主线程都知道这一点并退出等待并进行进一步处理。

【讨论】:

    【解决方案2】:

    您是否尝试过“加入”线程。而不是使用大量的闩锁连接可能会成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多