2

我的应用程序有一个单例类(与串行 COM 端口通信),它处理来自多个线程的数据请求。在处理其请求时,线程应该wait(). 如何在不唤醒所有等待线程的情况下通知线程数据已准备好(并将其发送回)?

4

2 回答 2

3

为每个线程创建一个阻塞队列并将它们注入到您的单例中。当任何答案到达时,只需选择适当的线程队列并将带有 offer(E o) 方法的消息放入其中。

在使用 take() 方法的线程中,您可以无限等待答案,或者使用 poll(long timeout, TimeUnit unit) 进行时间盒等待。

您可以使用额外的并发队列来提供单例而不阻塞它。

于 2013-06-27T22:26:03.793 回答
2

虽然@Lexandro 有一个很好的答案,但满足您要求的更简单的替代方案(据我了解,线程等待/阻塞是可以的)是只同步静态类中的方法。

于 2013-06-28T02:43:55.140 回答