.NET的ManualResetEvent和WaitHandle的Java等效项

.NET的ManualResetEvent和WaitHandle的Java等效项,第1张

.NET的ManualResetEvent和WaitHandle的Java等效项

您是否考虑过改用

wait
/
notify
(等价于
Monitor.Wait
Monitor.Pulse
)?

您需要进行一点检查,以查看您是否确实 需要 等待(避免出现竞争状况),但是它应该可以工作。

否则,类似的事情

CountDownLatch
可能会做您想要的。

编辑:我只注意到这

CountDownLatch
基本上是“单一用途”-就我所知,您以后不能重置计数。您可能想要
Semaphore
代替。
tryAcquire
像这样使用来等待超时:

if (semaphore.tryAquire(5, TimeUnit.SECONDS)) {   ...   // Permit was granted before timeout} else {   // We timed out while waiting}

请注意,这与

ManualResetEvent
每次成功调用
tryAcquire
都会减少许可数量不同-
因此最终它们将再次用尽。您无法像使用那样使它永久“设置”
ManualResetEvent
。(可以使用
CountdownLatch
,但是您无法“重置”它:)



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5487087.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存