Findet die Anzahl von jobs warten auf thread von executor service-pool (JAVA)?
Ich habe einen server, der mehrere worker-threads implementiert mit java executorService (ie. ein thread pool)
Mein problem ist, dass ich nicht in der Lage, log-in jeder Sekunde, die Länge der Arbeitsplätze, die darauf warten bearbeitet zu werden, wenn es keine Leerlauf-thread aus dem thread pool.
HINWEIS : die Protokollierung ist nicht mein problem, aber ich möchte in der Lage sein zu sehen, wie viele Aufgaben warten darauf, verarbeitet zu werden, die von einem worker-thread, ist es sowieso zu sehen, die Länge der Warteschlange (nicht der thread-pool ) innerhalb executor-service?
Ich habe keine Ahnung, wie diese umzusetzen ist Sache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
ThreadPoolExecutor
- Konstruktor akzeptiert einenBlockingQueue
parameter, die dieQueue
Implementierung verwendet zum speichern der wartenden jobs. Sie können diese anfordern queue mitgetQueue()
Methode, dann überprüfen Sie die Größe der Warteschlange:Beachten Sie, dass diese Methode ist nicht verfügbar in der
ExecutorService
- Schnittstelle, so ist es besser, zu konstruieren, dieThreadPoolExecutor
explizit statt mitExecutors.newFixedThreadPool
und Freunde:Während
Executors.newFixedThreadPool
im OpenJDK/OracleJDK macht das gleiche, es ist nicht angegeben, also mit(ThreadPoolExecutor)Executors.newFixedThreadPool(nThreads)
verursachenClassCastException
in zukünftigen Java-Versionen oder alternative JDK Implementierungen.ThreadPoolExecutor
wiegetTaskCount()
,getActiveCount()
usw. Wahrscheinlich thay Ihre Frage beantworten.Wenn man davon ausgehen kann, dass die
ExecutorService
Implementierung verwendet, die von Ihrem server istThreadPoolExecutor
, dann können Sie mit der MethodegetQueue()
liefert, dass die Anzahl der Aufgaben, die nicht zugewiesen wurdenWorker
noch.So können Sie etwa wie folgt ausgeführt:
Nur als Anregung verwenden ThreadPoolExecutor statt ExecutorService.
Sie können die Vorteile der Warteschlange blockieren, präsentieren Sie in der Klasse ThreadPoolExecutor. Dies würde Ihnen die Anzahl der wartenden threads.
Auch ThreadPoolExecutor Klasse mit Methoden, um die Anzahl von eingereichten Aufgaben und ausgeführte Aufgabe.
Finden Sie die
ThreadPoolExecutor
BlockingQueue
Hoffe, das hilft