让线程无限期地等待

时间:2011-08-09 11:21:49

标签: java multithreading wait

我有一个Java Thread来处理与Socket的传出通信。我只希望线程在有待发送的待处理输出时运行。假设我有一个Stack<String>来保存等待发送的数据,我希望当有些东西被添加到堆栈时唤醒通信线程并在堆栈为空时进入休眠状态。对此最好的方法是什么?

我看到的选项是;

  1. 使用wait()/notify() - 现在似乎是实现此行为的旧方式
  2. 如果有任何要发送的内容,则每隔x毫秒检查一次线程
  3. 每次构建一个新Thread(昂贵)
  4. 让线程不断运行(昂贵)
  5. 实施一些线程池或执行器解决方案
  6. 任何建议都会很棒:)

2 个答案:

答案 0 :(得分:7)

BlockingQueue正是您所寻找的。您的通信线程在take()上阻塞,并在其他线程add / put时立即被唤醒。

这种方法有几个优点:您可以让多个线程( consumer )共享同一队列以增加吞吐量,并且多个线程( producer )生成消息(消息传递)。

答案 1 :(得分:4)

如果数据结构满足您的需求,您可以使用java.util.concurrent库。像BlockingQueue这样的东西可能适合你。