Mam executor odpowiedzialny za pobieranie wiadomości z ArrayBlockingQueue.Co może być przyczyną zapamiętywania wątku w java.util.concurrent.ThreadPoolExecutor.getTask
new ThreadPoolExecutor(1, 1, 0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1),
r -> {
return new Thread(r, "Request-Queue-Drainer");
});
Wątek żądania kolejkowania jest w stanie OCZEKIWANIA (Chociaż zadania są przesyłane do tego wątku). Poniżej znajduje się zrzut wątku.
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)
Jaki może być powód, dla którego wątek ma status oczekiwania?
Co masz na myśli, "odpowiedzialny za odprowadzanie wiadomości z kolejki?" Tworzysz tutaj bardzo zwyczajnie wyglądający "ThreadPoolExecutor". Przekazujesz mu wyraźną "ThreadFactory", ale jedyną rzeczą, z którą twoja "ThreadFactory" różni się od domyślnej fabryki nici, jest nadanie każdemu nowemu wątkowi specjalnej nazwy. –