【发布时间】:2012-05-26 23:05:04
【问题描述】:
我使用 CountDownLatch 来等待来自另一个组件的某个事件(在不同的线程中运行)。以下方法适合我的软件的语义,但我不确定它是否按我的预期工作:
mCountDownLatch.await(3000, TimeUnit.MILLISECONDS)
otherComponent.aStaticVolatileVariable = true;
mCountDownLatch.await(3500, TimeUnit.MILLISECONDS);
... <proceed with other stuff>
场景应该是这样的:我等待3秒,如果latch没有倒数到0,我用那个变量通知其他组件,然后我最多等待3.5秒。如果再次超时,则我不在乎,将继续进行其他操作。
注意:我知道它看起来不像,但上面的场景在我的软件中是完全合理和有效的。
我确实阅读了 await(int,TimeUnit) 和 CountDownLatch 的文档,但我不是 Java/Android 专家,所以我需要确认。对我来说,所有场景看起来都有效:
- 如果第一个 await 成功,那么另一个 await 将立即返回
- 如果第一个等待超时,那么另一个等待仍然有效; 因此,如果另一个线程注意到静态信号,第二个 await 可能会成功返回
- 两个 await 调用都超时(根据我的软件语义,这很好)
我使用 await(...) 是否正确?即使同一个对象上的前一个 await(...) 超时,是否可以按上述方式使用第二个 await(...)?
【问题讨论】:
标签: java android synchronization countdownlatch