固定スレッド プールの各スレッドがキューからオブジェクトを取得しようとするマルチスレッド プログラムの一部を作成しようとしています。キューが空の場合、スレッドは待機します。
私が経験している問題は、プログラムが使用するメモリが増え続けることです。
public class Ex3 {
public static LinkedBlockingQueue<Integer> myLBQ = new LinkedBlockingQueue<Integer>(10);
public static void main(String argc[]) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(3);
myLBQ.add(new Integer(1));
for (;;) {
executor.execute(new MyHandler(myLBQ));
}
}
}
class MyHandler implements Runnable {
LinkedBlockingQueue<Integer> myLBQ;
MyHandler(LinkedBlockingQueue<Integer> myLBQ) {
this.myLBQ = myLBQ;
}
public void run() {
try {
myLBQ.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
アイテムがキューに追加されるのをスレッドが待機する必要があるときに、executor.execute が起動し続ける理由がわかりません。これを反映するようにコードを変更するにはどうすればよいですか?