问题标签 [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.
java - 正确实施乒乓球比赛
我被要求执行 10 次正确调用“ping”和“pong”的乒乓球游戏(意思是在 ping 之前没有乒乓球)。意思是,控制台中的最终输出应该是:“ping!(1)”,“pong!(1)”,“ping!(2)”,“pong!(2)”等。
需求是实现带有信号量、reetrantlock 和倒计时锁存器的gamepingpongthread。
我的问题是打印顺序并不总是按照要求,我想知道我做错了什么。
这是代码:
提前致谢
java - 每当我进行写入时,如何防止读取发生?
我正在尝试实现锁,我不希望在我写的时候发生读取。
以下是我ClientData
正在使用的课程CountDownLatch
-
问题陈述:-
我需要等待上面代码中的get
三个电话。AtomicReferences
一旦对我的三个调用完成了所有写入AtomicReferences
,set
那么我将允许对我拥有的三个 getter 进行调用。
所以我决定使用CountDownLatch
我初始化为的1
?我需要初始化它3
吗?每次在我进行新更新的第一组之前,我是否需要将倒计时闩锁重新设置回 3?因为我将AtomicReferences
在单独的三个语句中设置这三个。
我猜我上面的代码有问题吗?
笔记:-
我将在其他班级进行这样的设置-
其他一些线程在设置后必须从中读取数据AtomicReferences
。
更新:-
下面是我的后台线程代码,它将从 URL 获取数据,对其进行解析并将其存储在ClientData
类变量中。
android - CountDownLatch 与两个 Parse 查询一起使用?
我正在做两个 Parse.com 查询..
我基本上尝试过这样做,
当然,我只是得到各种各样的错误IllegalMonitorStateException: object not locked by thread before wait() etc 等等。
除了我很密集之外,问题的一部分是,实际上那些对 Parse 的 findInBackground 的调用,无论如何都会让你离开一个新线程,对吧?
作为记录,其中一个 Parse 调用看起来像这样,
还有关于那个的doco...
http://parse.com/docs/android/api/com/parse/ParseQuery.html#findInBackground(com.parse.FindCallback)
java - 即使我正在处理另一个,UI 线程也会卡住
我有这段代码,点击一个按钮,一个服务将从一个新线程启动,该服务将启动我的 TCP 客户端。
TCP 客户端一旦连接就会发送一个倒计时事件来通知片段继续工作。
代码看起来像这样
但是当我单击连接时,我的 UI 仍然由于某种原因冻结,即使我正在等待与 UI 线程不同的线程。当我使用 AsyncTask 而不是服务时,相同的代码工作正常。
java - 如果我对地图进行空检查,为什么应用程序的整体性能会下降?
下面是我的课程,用于CountDownLatch
确保在这些地图上发生写入时第一次不会在主要、次要和三级地图上发生读取。
下面是我的后台线程类,它只负责设置所有三个映射(在下面查找 parseResponse 方法)。它每 10 分钟运行一次。
问题陈述:
如果我对我的映射对象以及主要、次要和三次映射进行各种空值或完整性检查,性能会大大降低(不知道为什么)。但是,如果我不做任何健全性或空值检查,性能就会非常好。谁能解释我出了什么问题以及为什么会发生?
下面是一个例子 -
我正在使用ClientData
类来获取主线程中的所有映射。正如您在下面看到的,我正在做各种健全性检查以确保、 和mappings
不mappings.primary
为空。如果它们为空,则记录错误并返回mappings.secondary
mappings.tertiary
通过对一级、二级和三级映射的上述健全性和空值检查,应用程序的整体性能(第 95 个百分位)为 4 毫秒。
但是,如果我在没有对主要、次要和三次映射进行任何健全性检查或空值检查的情况下这样做,我会得到 0.87 毫秒的整体性能(第 95 个百分位)。
下面是我的 isEmpty 和 isNotEmpty 方法 -
java - 如何显式释放 CountDownLatch
有没有什么方法可以显式释放CountDownLatch
- 意味着没有 do countDown()
。
例如:假设我正在等待 100 个线程来做countDown()
,但是如果出现故障,我想释放这个闩锁而不再等待。我正在考虑先getCount()
锁定然后再循环执行countDown()
,但这不是最佳方式。
有什么建议/想法吗?
java - Why CountDownLatch in java cannot change its state again?
In Java once a CountdownLatch reaches its state = 0, it cannot change it, so it remains open forever. I wonder why implementors don't allow to reuse CountDownLatch?
java - How does CountDownLatch works in Java?
I am studying Synchronization in Java. I am not able to understand the exact mechanism of CountDownLatch.
Does CountDownLatch 'counts down the latch' (waits for completion of number of threads) as per the number of threads which are given at declaration?
Here is the code I tried to understand:
In the example above:
7 threads are spawned by ExecutorService (from the Thread pool). My understanding is that the latch should wait for completion of 6 threads (from 0 to 5), as defined by:
But the output that I get is not constant every time. Sometimes it waits for 6 threads to complete and sometimes it waits for 7 e.g.:
Here is output at alternate times:
EDIT : The CountDownLatch should ideally countDown until 5 tasks are passed the latch. Here it is showing as either 6 or 7.
What would be the fix for the code, if I want it to always display only 5 tasks before 'all process completed' ?
java - 使用循环屏障不会等到所有线程都完成
这是我想要做的。我有许多线程在它们继续之前都应该在一个共同点等待,所以明显的解决方案是使用CyclicBarrier
. 但我还想计算线程执行所花费的总时间。我在类中定义了以下实用程序方法ConcurrentExecutionActionTimer
。
然后我这样称呼它:
这Worker
是假设我的线程做了一些工作。例如:
因为我想打印所花费的时间,所以我必须使用CountDownLatch
它来确保在所有线程完成之前控件不会返回到 main。我们还有其他方法来确保相同的功能吗?
android - 将非阻塞 android FusedProvider API 转换为阻塞
我正在尝试使用非阻塞 FusedLocationProvider API 作为阻塞 API。这是我正在做的(大致):
- 启动异步任务
- 在后台线程中,连接到 PlayServices/FusedProvider API。有一个可用的超时阻塞方法。
- 使用上述 API,请求位置更新。API 将使用设备计算位置并触发在调用者线程上执行的回调。
- 等待回调使用
countDownLatch.await(timeOut,timeUnit)
- 当 Fused API 触发回调时,检索位置并执行 a
countDownLatch.countdown()
,这将释放闩锁。 - 返回位置。
我需要一种阻止方法,因为我可能需要在任何时间计算位置并使用它。上述方法有效,但我正在寻找更好的方法,因为 CountDownLatch 是从它阻塞的同一线程触发的。我不知道我这样做是否是在亵渎神灵/纯粹的愚蠢。
这是我的代码:
在这种情况下,除了锁定无限循环和标志之外,还有什么策略可以阻止吗?谢谢。