# Kann ein Runnable Objekt auf das Thread Objekt zugreifen?



## haimat (26. Feb 2009)

Hallo zusammen,

ich habe einen ThreadPool (via Executor), mit dem ich eine Reihe von Threads gewisse Arbeiten erledigen lasse. Sowohl das Thread- als auch das Runnable-Objekt sind selbst-erstellte Klassen, beide haben also neben der eigentlichen run() Methode auch noch weitere Methoden.

Ist es nun möglich, dass ich von einem Runnable Objekt, welches in einem Thread ausgeführt wird, direkt auf public Methoden des zugehörigen Thread Objekts zugreife? Kurz gesagt: Kann ich zusammengehörende Thread und Runnable Objekte miteinander interagieren lassen? Die Frage ist auch: Wie bekommt das Runnable Objekt das ausführende Thread Objekt?

Besten Dank im Voraus für eure Hilfe und Ideen!

Viele Grüße, Matthias


----------



## SlaterB (26. Feb 2009)

an den aktuell laufenden Thread bekommst du mit
Thread.currentThread()
welchen du dann wahrscheinlich auf deine Klasse casten kannst,

dies ist aber keine Besonderheit von Runnable, das funktioniert von überall aus,
außerdem gibts keine Garantie, dass nicht ein anderer Thread oder mehrere Threads die run()-Methode eines Runnable (oder gar die run-Methode von Thread) durchlaufen,
zwischen den fassbaren Objekten und dem Java-Prozess gibts keine richtige Verbindung

Runnable ist nur ein beliebiges Interface, 
wenn du eine eigene Thread-Klasse schreibst, die im Konstruktor das neue Interface 'Walkable' akzeptiert,
dann gilt für die komplett neue Klasse/ Interface Walkable genau das gleiche wie für Runnable,
nämlich im Grunde gar nix (besonderes)


edit:
wenn du eigene Thread-Klassen und statt Runnable ein anderes Interface/ Basisklasse verwendest,
kannst du dafür sorgen, dass die beiden Objekte verknüpft sind,
setter/ getter einführen, im Konstrukor der neuen Thread-Klasse aufrufen usw.


----------



## haimat (26. Feb 2009)

Hallo SlaterB,

danke für deine Antwort. Ich fürchte aber, dein Vorschlag (aus dem "edit") hilft mir in diesem Fall nicht (bzw. ich hab ihn nicht richtig verstanden). Mein Problem ist ja, dass ich via ThreadPool und Executor mehrere Threads laufen habe, wobei der Executor für mich die Verteilung der Runnable Objekt auf diese Threads vornimmt.

Wenn ich dem Executor nun ein Runnable Objekt zur Ausführung gebe, und er einen freien Thread nimmt und damit das Runnable Objekt ausführt, dann weiss ich (bzw. dieses Runnable Objekt) vorher ja noch nicht, welcher Thread dafür verwendet wird. Ich bräuchte also so etwas wie eine "getMyThread()" Methode, welche ich im Runnable Objekt ausführen kann, um das zugehörige Thread Objekt zu bekommen.

Ist das irgendwie möglich?


----------



## SlaterB (26. Feb 2009)

Thread.currentThread()

trifft es immer noch, ansonsten kannst du auch genau der Übergabe die getter/ setter aufrufen


----------



## haimat (26. Feb 2009)

Alles klar, danke!
Werde ich heute Abend gleich probieren


----------

