问题标签 [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 投票
2 回答
1540 浏览

java - java中countDown锁存器的使用

我是 Java 编程新手,第一次在 Java 中使用 countDown,

我的代码片段是,

正如我从另一篇文章中读到的,

CountDownLatch 的缺点/优点之一是,一旦计数达到零,它就不可重复使用,您不能再使用 CountDownLatch。

我的疑问是在 for 循环内使用相同的实例 latch 。如果 CountDownLatch 不可重用,如果第一次迭代 latch.countDown() 开始并且在第三次迭代时变为零会发生什么(第三次迭代的 latch.countDown() 无效??)。

问题是 :

当我调试for循环(使用eclipse)时,当控制到达时latch.await();它就会挂起。但是,如果我只是运行应用程序,则不会发生挂起。

我不太了解 countDown 锁存器的用法。请向我解释一下。

0 投票
2 回答
108 浏览

java - 返回数据类型不匹配

我面临重新指定返回数据类型的问题。我有FOComp实现 callabale 的类,'FOComp' 的 call() 方法返回数据类型List<ArrayList<Mat>>,如下面的 'FOComp' 类的代码所示。

并且方法“getResults()”返回ArrayList<Mat>如下代码所示类型的数据。目前,在运行时,当我执行代码时,我收到以下错误:

此行有多个标记

  • 返回类型不兼容 Callable<ArrayList<Mat>>.call()
  • 返回类型不兼容 Callable<List<Mat>>.call()

请让我知道如何解决它。

'FOComp' 类

“得到结果”

0 投票
0 回答
166 浏览

java - 如何从类中返回一个对象实现Callable

我有一个实现的类,callable我希望可调用类只返回一个类型的对象Mat。我将 Future 列表声明如下:

但我收到Cannot instantiate the type Future<List<Mat>>

请让我知道我做错了什么?

代码

0 投票
1 回答
11155 浏览

java - 如何使用 CompletableFuture 返回一个值

我创建了一个示例,我想知道如何使用CompletableFuture? 我也将其更改CompletableFuture<Void> exeFutureListCompletableFuture<Integer> exeFutureList但 eclipse 总是建议将其设置回 Void。

请让我知道如何使用 CompletableFuture 返回值。

代码

0 投票
2 回答
1518 浏览

java - 一些线程卡在 semaphore.aquire() (threads/semaphore/countdownlatch)

我创建了一个小型电影租赁模拟程序。它是这样工作的: - 主线程让用户输入客户姓名

  • 每个输入的客户都会启动一个新线程(Customer Runnable)
  • 创建 5 个客户后,开始租赁服务(等待 5 个倒计时)
  • 当客户运行()时,他们将首先尝试从信号量中获取()一个许可(有 5 个可用许可)
  • 如果他们获得许可证,他们将等待 1-10 秒,然后租车,然后等待 1-3 秒,然后交付汽车
  • 当汽车交付时,他们将重新开始循环迭代并尝试获得新的许可证

所以这似乎工作得很好;它适用于添加的前 5 个客户。5 号之后添加的客户似乎在 semaphore.aquire() 处等待,我不明白为什么,所以我在这里问。非常感谢所有帮助:)

应用程序.java:

客户.java:

存储.java:

电影.java:

0 投票
2 回答
580 浏览

java - CountdownLatch 任务完成后的 countDown 方法行为

假设我有一个大小为 3 的倒计时锁存器,即从父线程产生 3 个线程。

现在将有三个线程在各自的任务完成后调用 countDown。

我的问题是,任务完成的那一刻,执行该任务的线程的行为是什么。

该线程是在那一刻立即终止,还是通过进入空闲状态等待一段时间。?

我可以在倒计时锁存器的 Java 文档的任何地方找到它。

0 投票
1 回答
1479 浏览

java - 使用 CountdownLatch 从 accountmanager 获取 Auth Token

在向服务器发出请求之前,我正在尝试从 Android 中的帐户获取身份验证令牌。我正在尝试使用 CountdownLatch 控制流程,以便它等到:

  • a) 超时(10 秒)
  • b) 我们得到令牌

    /li>

上下文被传递:

现在它在这两种情况中的任何一种之前退出。但是,它总是在所有其他进程完成后到达 AccountManagerCallback。奇怪的。我肯定做错了什么。感谢您的帮助!

0 投票
2 回答
74 浏览

java - 每当在两个流上发生写入时,如何阻止读取?

我正在尝试实现锁定,我希望通过它来避免在我进行写入时发生读取。

我的要求是:

  • 读取阻塞,直到第一次设置所有两个映射。
  • 现在第二次,如果我正在更新地图,我仍然可以返回所有两个旧地图值(在所有两个地图上完成更新之前),或者它应该阻止并在更新完成时返回所有新的两个地图值在所有两张地图上。

因为我有两个 Maps - primaryMappingsecondaryMapping所以它应该返回两个更新地图的所有新值,或者它应该返回地图的所有旧值。基本上,在更新时我不想返回primaryMapping有旧值,secondaryMapping有新值。它应该是一致的,要么应该返回旧值,要么应该在更新地图后返回新值。就我而言,地图更新将在 7 或 8 个月内发生一次(很少)。我为此使用倒计时锁存器,到目前为止它工作正常,没有任何问题。

现在我有两个流程,如下所示: 对于每个流程,我都有一个 URL,我们可以从中获取上述两个地图的数据。一般来说,我将有两个流程的两个映射,因此与设备流程相比,我们将为 PROCESS 流程的这两个映射具有不同的值。

我有一个后台线程每 5 分钟运行一次,它从每个 FLOW url 获取数据,并在有更新时填充这两个地图。当应用程序第一次启动时,它会更新映射,之后,它会在 7-8 个月后更新映射。这并不意味着两个流映射会同时改变。PROCESS 映射可能发生了变化,但 DEVICE 映射没有变化。

正如您在上面看到的,setMappings如果任何流映射已更新,它会通过调用方法来更新映射。

下面是我的 PartitionHolder 类:

现在这是我PartitionHolder在主线程中使用类的方式。在一次调用中,我们将只获得一个流的映射。在下面的代码dataKey.getFlowType()中可以是过程或设备。

现在在我上面的代码中,如您所见,setMappings如果任何流映射已更新,我将通过调用方法来更新映射。有两种情况可能发生:

  • 当应用程序第一次启动时,它可以正常工作,没有任何问题,因为它会更新两个流的映射。
  • 现在第二次,假设对于 PROCESS 流,映射已更新,但对于 DEVICE 流映射尚未更新,那么在这种情况下,它将通过调用setMappings将覆盖的方法来更新整体映射mappingsHolder。这种方法的问题是,对于 DEVICE 流,我将在调用时开始获取空映射,getFlowMapping因为它会将 DEVICE 映射覆盖到空映射。正确的?

我怎样才能避免我的第二个问题?有没有更好的方法来解决这个问题,而不是使用 Map 和 key 作为 FlowType?我需要在这里使用工厂模式来解决这个问题还是其他更好的方法?

0 投票
2 回答
650 浏览

java - CountDownLatch 是否受到虚假唤醒的影响?

等待/通知和锁定/条件等并发管理机制似乎受到虚假唤醒的影响。开发人员通过重新检查条件是否确实发生了变化来应对这些意外唤醒。

当谈到 CountDownLatch 时,虚假唤醒是一个问题吗?

0 投票
1 回答
4984 浏览

java - java Fork/Join 池、ExecutorService 和 CountDownLatch

我们在 java 中有三种不同的多线程技术 - Fork/Join pool, Executor Service & CountDownLatch

分叉/加入池http://www.javacodegeeks.com/2011/02/java-forkjoin-parallel-programming.html

Fork/Join 框架旨在使分治算法易于并行化。这种类型的算法非常适合可以分为两个或多个相同类型的子问题的问题。他们使用递归将问题分解为简单的任务,直到这些任务变得简单到可以直接解决。然后将子问题的解决方案组合起来以给出原始问题的解决方案

ExecutorService是一个扩展 Executor 类的接口,代表异步执行。它为我们提供了管理异步任务结束和检测进度的机制。

invokeAll():执行给定的任务,返回一个 Futures 列表,在所有完成时保存它们的状态和结果。Future.isDone() 对于返回列表的每个元素都是 true。

CountDownLatch:http://examples.javacodegeeks.com/core-java/util/concurrent/countdownlatch-concurrent/java-util-concurrent-countdownlatch-example/

CountDownLatch 用于同步以允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。

我的假设:

在这两种选择中,只有在完成所有任务/线程后才能知道最终结果。

这三种选择是互补的还是互补的