PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage zu Interface + Threads in Java


Aqualon
2004-01-23, 13:15:36
H!

Ich habe mal eine Verständnisfrage zu Interfaces/Threads in Java.

Bsp.:


public class Test implements Runnable
{

public void run()
{
}

}


So sieht ja eine minimale Klasse aus, die das Interface Runnable implementiert.

Aufgerufen wird der Thread ja folgendermaßen:


...
Test t1 = new Test();
Thread th1 = new Thread(t1);
th1.start();
...


Nun meine Frage. Ein Interface ist ja nur eine Art Bauplan, in dem die Methoden festgelegt werden, die in einer Klasse, die dieses Interface implementiert, realisiert werden müssen. Mir ist nun allerdings nicht ganz klar, wie der Zusammenhang zwischen dem Interface Runnable und dem Thread ist. Weiß Java einfach, dass eine Klasse Threadfähig ist, wenn sie das Interface Runnable implementiert? Das muss ja mal irgendwo festgelegt worden sein.

Wäre schön, wenn jemand das ein wenig genauer erklären könnte, wie das Zusammenspiel in diesem Fall funktioniert.

Aqua

Demirug
2004-01-23, 13:38:03
Ein Interface ist eine Zugriffs-möglichkeit für eine Klasse. Das ist so wie mit den Stromanschlüssen am Netzteil. Das Netzteil ist deine Klasse und hat unterschiedliche Spannungsanschlüsse die dann jeweils ein Interface darstellen. Willst du jetzt ein Gerät anschlissen muss dieses Gerät zum Anschluss passen. Also mit dem Interface zurecht kommen. Damit die Threadklasse eine andere Klasse verwenden kann muss diese einen Runable Anschluss(Interface) haben.

Interface werden immer dann gerne benutzt wenn man interaktivität zwischen Klassen braucht aber noch nicht alle Klassen vorliegen. Das Interface ist dann ein Vertrag den eine Klasse erfüllen muss damit sie mit einer bereits vorhanden zusammenarbeiten kann.

HellHorse
2004-01-23, 19:16:32
Interfaces sind eigentlich dazu da Typen von Klassen zu trennen (nein, ein Typ und eine Klasse sind nicht das gleiche).
Im gegebenen Fall wird die run() Methode es Objektes in einem neuen Thread ausgeführt. Es eigentlich ganz egal von welcher Klasse das entsprechende Objekt erzeugt wurde und wo in der Vererbungshierarchie sie steht. Alles was gebraucht wird, ist eine run() Methode. Dies wird sichergestellt indem nur Argumente vom Typ Runnable übergeben werden können, die eben besagte run() Methode haben.

Falls du was mit Threads in Java rummachst und keine alpha von Tiger hast (soll's leider geben)
http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html :naughty:

Ach ja, man kann auch Konstanten in Interfaces definieren.

Aqualon
2004-01-24, 10:23:15
Danke für eure Antworten. Ich habe mir auch noch ein Tutorial von Sun zu Interfaces durchgelesen (http://java.sun.com/docs/books/tutorial/java/interpack/interfaces.html) und das ganze jetzt soweit verstanden.

Eine Frage habe ich allerdings noch. Dass Interfaces als Typ verwendet können hab ich soweit verstanden. Wäre also in meinem oben genannten Beispiel folgender Code möglich:

Runnable myRun = th1;

Ich weise also einer Referenzvariable vom Typ Runnable eine Referenz auf ein Thread-Objekt zu. Wenn ich das Tutorial richtig verstanden habe, sollte das gehen, weil die Klasse Thread das Interface Runnable implementiert. Liege ich da richtig, oder hab ich das falsch verstanden?

@HellHorse: Wenn ich mich mal tiefer in Threads einarbeiten möchte, werde ich mich näher mit Concurrent Programming beschäftigen. Zum fast reinen Rumspielen ist das wohl etwas Overkill ;)

Aqua

HellHorse
2004-01-25, 16:44:09
@Aqualon
Ja, das hast du richtig verstanden.