У меня работает система с несколькими потоками - мой основной поток просто проверяет, есть ли задания, которые нужно выполнить, и если они есть, он вызывает подпотоки (notifyAll()
), которые будут его выполнять.После этого подпотоки просто wait()
пока не появятся новые задачи.
На самом деле, система потоков работает надежно, но после более длительного времени выполнения (3-5 ч) некоторые подпотоки простоумереть без предупреждения или ошибки.Они просто выходят один за другим - но опять же только с временным интервалом 2-х часов.Я использовал jconsole, чтобы проверить это явление, какие потоки работают и как они просто исчезают.
Кроме того, основной поток выполняется каждую секунду, но дочерние потоки в основном wait()
работают ииспользуется не часто (поскольку в тестовой среде не так много задач).
Единственная причина, по которой я могу придумать, состоит в том, что JVM отключает подпотоки, поскольку они не используются достаточно часто.?
Я был бы очень благодарен за вашу помощь!
PS Все потоки не определены как демоны, а основной поток просто отлично работает!
edit
Спасибо за ваши ответы, но я фактически использую этот цикл.
public void addTask (Task in_task) throws InterruptedException {
synchronized (tasks) {
while (tasks.size() == MAXIMUM_NUMBER_OF_TASKS) {
tasks.wait();
}
tasks.offer(in_task);
tasks.notifyAll();
}
}
Я использую этот цикл, так что будет выполнено только определенное количество задач.