Ich habe den newFixedThreadPool der Größe 100 erstellt und startet 500 Threads darauf. Alle Threads sind ordnungsgemäß gestartet und alle nehmen genügend Zeit, die sie alle nehmen sollten. Aber dann Executor nur mit einigen Thread-Ausgang und die meisten von ihnen nicht heruntergefahren. Ich habe die shutdown() und awaistTermination() auch mit max-Wert aufgerufen, so dass es warten muss, bis alle Threads beendet sind. Dies funktioniert gut, wenn die Aufgaben in Anzahl wie 20 oder 30 mit der gleichen Poolgröße wie 100 sind. Die Logik in Thread ist über Liste zu betreiben und diese Liste in Xlsx-Datei zu konvertieren. Bitte teilen Sie alle Informationen, wenn jemand ähnliches Problem hatte.FixedThreadPool nicht korrekt ausgeführt
-2
A
Antwort
1
Ein häufiger Fehler beim Senden von Aufgaben an einen ExecutorService ist das Ignorieren von Fehlern, die auftreten. Du musst entweder;
- Anruf Future.get() auf jedem Future von
.submit(task)
zurück einen Fehler zu sehen oder - Sie haben alle Fehler in einem
try { } catch (Throwable t)
Block zu fangen und zu protokollieren.
Am wahrscheinlichsten tritt ein Fehler auf, bei dem alle Aufgaben fehlschlagen.
BTW Wenn Sie eine CPU-gebundene Aufgaben haben, ist die optimale Anzahl der Thread möglicherweise die Anzahl der CPUs, die Sie haben.
Die Logik in Thread-Liste für den Betrieb über und
Ein viel einfacherer Ansatz umwandeln wahrscheinlich zu verwenden, um sein parallelStream z.B.
Ja, ich habe die future.get(), immer noch das gleiche Problem, habe ich auch die ganze Ausnahme in einzelnen Threads protokolliert (es gab keine in der Tat). Ich werde versuchen, mit thareds = Anzahl der CPUs, aber nicht sicher bin ich CPU gebundenen Aufgaben oder nicht. –