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
ExecutorService
mitnewFixedThreadPool
- verwenden
ExecutorService
mitnewCachedThreadPool
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, newFixedThreadPool
dass das das Richtige wäre, denn dann würden Verbindungen in Warteschlangen warten, um einen Thread zu erhalten.
newCachedThreadPool
wä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 newCachedThreadPool
ein 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?