ThreadPoolExecutor: Aufgaben werden in die Warteschlange gestellt und nicht übergeben

Wir haben ein Szenario, in dem an ThreadPoolExecutor gesendete Aufgaben lange ausgeführt werden. Wenn der Thread-Pool gestartet wird, starten wir ihn mit einer Core-Pool-Größe von 5, einer maximalen Pool-Größe von 20 und einer Warteschlangengröße von 10. In unserer Anwendung werden ungefähr 10 Aufgaben eingereicht. Meistens werden diese Aufgaben für einige Minuten pro Stunde ausgeführt und dann abgeschlossen. Es gab jedoch eine Situation, in der alle 5 Aufgaben an E / A gehängt wurden. Infolgedessen hat meine Kernpoolgröße das Maximum erreicht, aber meine Threadpoolexecutor-Warteschlange war nicht voll. Die zusätzlichen 5 Aufgaben hatten also keine Chance, ausgeführt zu werden. Bitte schlagen Sie vor, wie wir mit einem solchen Szenario umgehen können. Ist es in einer solchen Situation besser, eine kleinere Warteschlange zu haben? Was wäre eine optimale Warteschlangengröße beim Initialisieren von threadPool?

Gibt es auch in Bezug auf die gehängten Aufgaben eine Möglichkeit, die Threads aus dem Threadpool herauszuziehen? In diesem Fall könnten zumindest andere Aufgaben ausgeführt werden.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage