我的应用程序有一个单例类(与串行COM端口通信),它处理来自多个线程的数据请求。在处理其请求时,线程应wait()
。如何在不唤醒所有等待线程的情况下通知线程数据已准备好(并将其发回)?
答案 0 :(得分:3)
为每个线程创建一个blocking queue并将它们注入到Singleton中。当任何答案到达时,只需选择适当的线程队列并将带有商品(E o)方法的消息放入其中。
在使用take()方法的线程中,您可以等待无限时间的答案,或者使用poll(长时间超时,TimeUnit单位)进行时间框等待。
您可以使用额外的concurrent queue来提供单身而不会阻止它。
答案 1 :(得分:2)
虽然@Lexandro有一个很好的答案,但是一个更简单的替代方案可以满足你的要求(我理解它们,线程等待/阻塞是o.k.)就是在静态类中同步方法。