Когда убивает cacheThreadPool неактивные потоки? Java - PullRequest
0 голосов
/ 25 мая 2020

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?

...