Я пытаюсь написать часть многопоточной программы, в которой каждый поток из фиксированного пула потоков пытается получить объект из очереди, и если очередь пуста, поток ждет.
Проблема, с которой я сталкиваюсь, заключается в том, что память, используемая программой, продолжает увеличиваться.
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 продолжает срабатывать, когда потоки должны ожидать добавления элемента в очередь. Как мне изменить свой код, чтобы отразить это?