问题标签 [countdownlatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
58730 浏览

java - CountDownLatch 与信号量

使用有什么好处吗

java.util.concurrent.CountdownLatch

代替

java.util.concurrent.Semaphore ?

据我所知,以下片段几乎是等价的:

1.信号量

2:倒计时锁存器

除了在 #2 的情况下,闩锁不能被重用,更重要的是,您需要提前知道将创建多少线程(或者等到它们都启动后再创建闩锁。)

那么在什么情况下闩锁可能更可取呢?

0 投票
3 回答
11660 浏览

java - 让一个线程进入休眠状态,直到另一个线程解决了某个条件

这是完成(我认为是)同一件事的两段代码。

我基本上是在尝试学习如何使用 Java 1.5 的并发来摆脱 Thread.sleep(long)。第一个示例使用 ReentrantLock,第二个示例使用 CountDownLatch。我想要做的主要是让一个线程进入睡眠状态,直到另一个线程解决了一个条件。

ReentrantLock 在我用来决定是否唤醒另一个线程的布尔值上提供了一个锁,然后我使用带有等待/信号的条件来休眠另一个线程。据我所知,我需要使用锁的唯一原因是如果有多个线程需要对布尔值进行写访问。

CountDownLatch 似乎提供与 ReentrantLock 相同的功能,但没有(不必要的?)锁。然而,感觉就像我通过只需要一个倒计时来初始化它来劫持它的预期用途。我认为它应该在多个线程将要处理同一个任务时使用,而不是在多个线程正在等待一个任务时使用。

所以,问题:

  1. 我是否在 ReentrantLock 代码中为“正确的事情”使用了锁?如果我只在一个线程中写入布尔值,是否需要锁?只要我在唤醒任何其他线程之前重置布尔值,我就不会引起问题,可以吗?

  2. 是否有一个类似于 CountDownLatch 的类可以用来避免更自然地适合此任务的锁(假设我应该在这种情况下避免它们)?

  3. 还有其他方法可以改进我应该注意的代码吗?

示例一:

示例二:

0 投票
3 回答
10363 浏览

javascript - jQuery Countdown 插件和 AJAX

我正在使用jQuery Countdown 插件来实现倒计时并在计时器到期时调用 Web 服务。

问题是我在页面上使用 AJAX,并且必须重新设置每个 AJAX 请求的倒计时,如下所示:

出于某种原因,这会根据请求创建一个新的 Countdown 实例,从而在 Countdown 到期时导致对 Webservice 的大量调用。

如何确保一次只存在一个倒计时实例?

编辑

在文档中找到了这个,虽然不适合我

0 投票
6 回答
9116 浏览

java - 灵活的倒计时?

我现在遇到了两次问题,生产者线程产生 N 个工作项,将它们提交给一个ExecutorService,然后需要等到所有 N 个项目都被处理完。

注意事项

  • N 事先不知道。如果是,我会简单地创建一个CountDownLatch然后拥有生产者线程await(),直到所有工作完成。
  • 使用 aCompletionService是不合适的,因为尽管我的生产者线程需要阻塞(即通过调用take()),但无法发出所有工作已完成的信号,从而导致生产者线程停止等待。

我目前最喜欢的解决方案是使用整数计数器,并在提交工作项时增加它,并在处理工作项时减少它。在提交所有 N 个任务之后,我的生产者线程将需要等待一个锁,检查是否counter == 0收到通知。消费者线程将需要通知生产者,如果它已经减少了计数器并且新值是 0。

有没有更好的方法来解决这个问题,或者java.util.concurrent我应该使用合适的构造而不是“滚动我自己的”?

提前致谢。

0 投票
2 回答
10412 浏览

c# - 是否有与 Java 的 CountDownLatch 等效的 C#?

是否有与 Java 的CountDownLatch等效的 C# ?

0 投票
1 回答
1409 浏览

java - Java CountDownLatch 用于等待 JFrame 释放

我已经引用了这个先前的问题以及其他来源,但无法让 CountDownLatch 正常工作。

背景:mainFrame 创建名为 dataEntryFrame 的新 Frame。当点击dataEntryFrame“提交”按钮时,记录添加到数据库和dataEntryFrame被处理。此时,mainFrame 应该清除并重新加载一个显示所有记录的 jList。

问题:加载 dataEntryFrame 时,java 冻结,dataEntryFrame 组件永远不会加载。我无法通过这部分......然后,在 DataEntryFrame 中,CountDownLatch 应该只在单击提交按钮后递减,成功地将记录添加到数据库表中,然后自行处理。或者当用户点击取消...

代码:来自 MainFrame

代码:来自 DataEntryFrame

0 投票
14 回答
96930 浏览

java - Java 并发:倒计时锁存器与循环障碍

我正在阅读java.util.concurrent API,发现

  • CountDownLatch: 一种同步辅助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
  • CyclicBarrier: 一种同步辅助工具,它允许一组线程相互等待以达到共同的障碍点。

对我来说,两者似乎是平等的,但我相信还有更多。

例如,在CoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrier.

两者之间还有其他区别吗?有人想
在哪里重置倒计时的值?use cases

0 投票
2 回答
1307 浏览

java - CountdownLatch 结合 await(maxTime) 和 countdown()

我有几个线程运行几乎无限的时间和迭代次数。当找到最佳解决方案时,迭代计数将重置为 0。设置最大迭代次数以防止无限循环。

当所有线程都达到最大迭代次数时,我使用 countdownlatch 停止进程。换句话说,当一个线程达到最大迭代次数时,它使用notifyThreadStop()通知我的主线程,当所有线程停止时,触发 countdown()。

注意:我的线程在 FixedThreadPool ExecutorService 中运行。

我想添加一个 maxTime 锁存器。所以我做的是以下

现在,我知道如果倒计时触发了闩锁,这意味着所有线程都已停止,因此我可以关闭我的 ExecutorService。

当达到最大时间时,情况并非如此。所以在(1)中,我想遍历我所有的跑步者,以文明的方式终止他们:-)。为此,我定义了一个函数 requestTermination(),简单地说,就是在我的 runnables 中将迭代计数器设置为 MaxIterationCount。

所以(1)会变成

现在,我需要再次等待,直到所有线程都真正停止,然后我才能继续......嗯,我只是想我可以有一个额外的锁存器并使用它。

所以(2)会变成

当然,我的函数notifyThreadStop()需要对其进行修改,并且需要一个标志告诉它在 mylatch2 上而不是 mylatch 上执行 countdown()。

我想我刚刚回答了我的问题,但是既然所有这些都已经写完了,我将把它留在这里供其他人参考。

现在的问题是:有更好的方法来处理这个问题吗?(1) 或 (2) 中的 shutdownNow() 是唯一需要的吗?知道我的线程必须在退出之前关闭它们自己的日志文件并关闭它们内部的 Callable thread*ss*。

0 投票
3 回答
2472 浏览

java - java并发:轻量级非阻塞信号量?

我有一个我想执行一次的回调的情况。为了争论,假设它看起来像这样:

其中 X 是一些具有以下行为的并发对象:

  • 构造函数:X(int N) -- 分配 N 个使用许可

  • boolean use(): 如果至少有 1 个使用许可,则消耗其中一个并返回 true。否则返回假。这个操作对于多个线程来说是原子的。

我知道我可以为此使用java.util.concurrent.Semaphore,但我不需要它的阻塞/等待方面,我希望这是一次性使用的东西。

除非我做类似的事情,否则 AtomicInteger 看起来还不够

我对 while 循环感到不安。

CountDownLatch 不起作用,因为countDown() 方法没有返回值,并且不能使用 getCount() 原子地执行。

我应该只使用信号量还是有更合适的类?

0 投票
1 回答
2296 浏览

c++ - C++ 中的 CountDownLatch 使用 Boost Mutexes 和 Condition

我尝试使用 boost 互斥锁和条件变量来实现 CountDownLatch。下面是代码,想知道我是否需要添加任何其他内容。

我如何也可以对这段代码进行单元测试?