让线程无限期地等待

Dor*_*ori 10 java multithreading wait

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

我看到的选项是;

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

任何建议都会很棒:)

Tom*_*icz 7

BlockingQueue正是你要找的.take()当某个其他线程执行add/ 时,您的通信线程会阻塞并立即唤醒put.

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