Ich habe ein Java-Programm, das einen Port für die Eingabe abhört. Basierend auf Input ruft es einen Webservice auf und gibt dann einen Erfolg / Misserfolg an das Client-Programm zurück.
Ich gable einen Thread für jede Client-Verbindung. Die Antwort an den Client, der eine Verbindung zum Programm herstellt, muss schnell erfolgen.
Dies sind die Entscheidungen, die ich erwäge
- Verwenden Sie normale Threads
- verwenden
ExecutorServicemitnewFixedThreadPool - verwenden
ExecutorServicemitnewCachedThreadPool
Der Grund, warum ich über Pools nachdenke, ist, dass meine Threads nur von kurzer Dauer sind - sie rufen einfach einen Webservice auf, geben das Ergebnis an den Client zurück und schließen die Verbindung.
Ich denke nicht, newFixedThreadPooldass das das Richtige wäre, denn dann würden Verbindungen in Warteschlangen warten, um einen Thread zu erhalten.
newCachedThreadPoolwäre bis auf eine Sache perfekt gewesen - Fäden sterben nach einer Minute. In meinem Fall bekomme ich Bursts von Verbindungen - dh mehrere Verbindungen, und dann kann es für einige Minuten zu einer Pause kommen und dann erneut zu Bursts. Ich denke, die Threads im CachedThreadPool würden sterben und müssten erneut erstellt werden - in diesem Fall könnte es manchmal wie # 1 funktionieren.
Idealerweise hätte ich gerne newCachedThreadPoolein Minimum gehabt - dh eine Einstellung, die besagt, dass die Anzahl der Threads niemals unter 20 fallen würde. So werden inaktive Threads getötet, aber niemals unter einen Mindestschwellenwert fallen gelassen.
Gibt es so etwas? Oder gibt es bessere Alternativen?