Der einzige Unterschied ist, dass das zweite Setup es Ihnen erlaubt, mit maximal 10 Threads zu laufen; während der erste mit 5 beginnt; und wird nie mehr als das schaffen.
Sie würden das erste Setup verwenden, wenn Sie verstehen, dass Sie nicht mehr Leistung/Durchsatz/... mehr Threads erhalten. Denken Sie jedoch daran, dass feste Größe auch bedeutet: Es wird immer 5 (oder 10) Threads geben. In diesem Sinne ist diese Art von Threadpool am sinnvollsten in einer "statischen" Umgebung; wo sich Ihre "Last" im Laufe der Zeit nicht stark ändert. Sie möchten nicht, dass 5 Threads arbeiten, die für 10 Threads gut sind, aber Sie wollen auch nicht, dass 10 Threads die meiste Zeit im Leerlauf sind, weil 5 gut genug wäre.
Mit anderen Worten: Es hängt sehr viel von Ihrer gesamten Einrichtung ab; Auf den eingehenden Datenverkehr und viele andere Faktoren, wie viele Threads Ihnen "beste" Ergebnisse geben. Im Zweifelsfall sollten Sie also vorsichtiges Profiling durchführen. und testen, was sich ändert eine Variable (wie die maximale Anzahl der Threads) ändert sich für Sie. Aber natürlich: All das erfordert, dass Sie gute Mittel haben, um die Leistung/das Verhalten Ihrer Anwendung zu messen.
"Wenn mehr als corePoolSize aber weniger als maximumPoolSize-Threads ausgeführt werden, wird nur dann ein neuer Thread erstellt, wenn die Warteschlange voll ist." - von [ThreadPoolExecutor] (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html). Wenn also eine unbeschränkte Warteschlange verwendet wird, wird die Thread-Anzahl über corePoolSize ** im gezeigten Setup von Threadpool mit variabler Größe nie erreicht. – Fildor