У меня есть исполнитель, который отвечает за потребление сообщений от ArrayBlockingQueue.Что может быть причиной того, что поток будет стоять на java.util.concurrent.ThreadPoolExecutor.getTask
new ThreadPoolExecutor(1, 1, 0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1),
r -> {
return new Thread(r, "Request-Queue-Drainer");
});
Request-Queue-Drainer поток находится в состоянии ожидания (Хотя задачи представляется в этой теме). Ниже приведена дамп потока.
Name: Request-Queue-Drainer
State: WAITING on java.u[email protected]5b4757a2
Total blocked: 0 Total waited: 8
Stack trace:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
В чем причина того, что поток находится в состоянии ожидания?
Что вы имеете в виду, «ответственный за удаление сообщений из очереди?» Здесь вы создаете очень обычный «ThreadPoolExecutor». Вы передаете ему явный «ThreadFactory», но единственное, что ваш «ThreadFactory» делает иначе, чем фабрика нитей по умолчанию, это дает каждому новому потоку специальное имя. –