Kommunikation zwichen Callable und Thread möglich?

timd81

Grünschnabel
Hallo,

ich habe eine Frage zum Thema Thread-Pools, Thread und Callable.

Hier zunächst mein Szenario. Ich möchte in meinem Java Programm bestimmte Aufgaben parallelisieren. Als Basis möchte ich einen Thread Pool verwenden, da hier ich recht einfach steuern kann, wieviele Threads (min,max,etc) wann und wie lange existieren sollen. Die verschiedenen Aufgaben übergebe ich an den Thread Pool als Callables in einer Warteschlange. Das funktioniert auch alles ganz gut. Die Callables werden durchlaufen und ich erhalte das Ergebis wie gewünscht zurück.

Für die Abarbeitung des Callable-Objektes benötige ich eine Verbindung zu einem externen System. Wenn ich nun in meinem Thread-Pool 10 Threads habe und 100 Callable abarbeiten möchte, würde dies zu 100 Verbindungsoperationen (öffnen/schließen) führen.
Besser wäre, wenn die Verbindung im Thread hergestellt würde und das Callable diese nutzen kann. Dadurch bräuchte ich ingesamt nur 10 mal eine Verbindung (also je Thread) herstellen.

Wie kann nun das Callable auf den Thread bzw. auf dessen Verbindungsinformationen zugreifen? Eine spezielle Thread-Klasse kann ich ja mittels ThreadFactory dem Pool Creator übergeben. Allerdings gibt es im Thread ja nur Runnables und keine Callables.
Wenn ich das Callable erstelle, gibt es den Thread ja auch noch nicht.

Hat jemand eine Idee?
Gruß Tim
 
hi timd81,
nur mal so als Überlegung... ist es vieleicht sinnvoll eine Art Connection-Pool in Deinem System zu verwenden?
Würde dann ca so aussehen, dass ein Thread ein Singleton-Object, nähmlich den Connection-Pool auf eine Verbindung anfragen würde, der wiederum zusieht, dass nicht zu viele geöffnet werden, bzw freie Verbindungen für die Wiederverwendung zuzuteilen.
Ich nehme an dass die Anfrage auf eine Verbindung eine synchronisierte Methode sein müsste.

Gruß

Takidoso
 
Hallo Takidoso,

die Idee gefällt mir ganz gut. Wenn ich es richtig verstehe, würde dann das Callable bei Ausführung durch den Thread die ConnectionPool-Instanz für die Verbindung kontaktieren und um eine Verbindung bitten. Ich müßte dann nur noch die ThreadFactory anpassen, damit die Anzahl der Verbindungen synchron der Anzahl der Threads ist.

Danke Tim
 
Zurück