我有一个Java Thread
来处理与Socket
的传出通信。我只希望线程在有待发送的待处理输出时运行。假设我有一个Stack<String>
来保存等待发送的数据,我希望当有些东西被添加到堆栈时唤醒通信线程并在堆栈为空时进入休眠状态。对此最好的方法是什么?
我看到的选项是;
wait()/notify()
- 现在似乎是实现此行为的旧方式Thread
(昂贵)任何建议都会很棒:)
答案 0 :(得分:7)
BlockingQueue
正是您所寻找的。您的通信线程在take()
上阻塞,并在其他线程add
/ put
时立即被唤醒。
这种方法有几个优点:您可以让多个线程( consumer )共享同一队列以增加吞吐量,并且多个线程( producer )生成消息(消息传递)。
答案 1 :(得分:4)
如果数据结构满足您的需求,您可以使用java.util.concurrent库。像BlockingQueue这样的东西可能适合你。