cacheThreadPool автоматически удаляет потоки, если они неактивны в течение 60 секунд, насколько мне известно. Мне непонятно только, что именно это означает неактивность.
Моя реализация выглядит так:
public class ProcessHandler {
private class Worker implements Runnable {
private final LinkedBlockingQueue<MyTask> tasks = new LinkedBlockingQueue<>();
void schedule(List<MyTask> task) {
tasks.addAll(task);
}
@Override
public void run() {
while (true) {
try {
var task = tasks.take();
task.run();
} catch (InterruptedException ie) {
// perhaps, handle somehow
}
}
}
}
private ExecutorService esMultiThread = Executors.newCachedThreadPool();
public void submitProcess(List<MyTask> task){
Worker test = new Worker();
test.schedule(task);
esMultiThread.execute(test);
}
}
Я создаю экземпляр ProcessHandler
, а затем Я хочу отправлять задачу снова и снова с submitProcess
. Каждый новый вызов submitProcess
должен запускать новый поток, чтобы все обрабатывалось параллельно, например, если я вызываю submitProcess 10 раз быстро подряд. Затем эти задачи должны быть обработаны новым потоком из cachedThreadPool
.
Мой вопрос сейчас, пока рабочий спит, то есть ожидает take()
, будет ли поток убит, если рабочий ничего не получит для более 60 секунд, или поток будет жить бесконечно, потому что «спящий» - это состояние, которое не считается неактивным cacheThreadPool
?