Threads extends Thread oder implements Runnable

y20frank

Mitglied
Hallo zusammen,
bin JAVA-Neuling und versuche mich gerade mit Threads zu beschäftigen. Dabei ist mir die Frage aufgekommen, wie man das grundsätzlich "besser" angeht. Sollte man mit Thread mit implements Runnable oder eher mit "extends Thread" erstellen? Gibt es da wesentliche Unterschiede?
Danke und Gruß
Frank
 
Ja, immer möglichst nur das Interface implementieren. Ausser natürlich es gibt ein Adapter, welcher nicht benötigte Methoden einfach (leer) implementiert. Grund dafür wird wohl sein, dass es in Java "keine Mehrfachvererbung gibt", zumindest was das Erben von Klassen anbelangt.
 
Ja, wegen der Mehrfachvererbuhg... leuchtet mir jetzt ein! *Groschen fällt*
Dann hab ich's ja bislang "richtig" mit "Runnable" angegangen. Danke für Eure Antworten! 🙂
Gruß
Frank
 
Zudem erwarten Klassen wie der ExecutorService (->Thread-Pool) Parameter, die das Runnable-Interface implementieren, was aus meiner Sicht ein weiterer Punkt für das Interface ist (einfacherer Umstieg auf Threadpools).
 
Ich mache immer
Code:
extends Thread
. Natürlich mit der Ausnahme, dass ich noch von einer anderen Klasse erben muss. Das kommt aber fast nie vor.
 
Das Thread Runnable nicht nur implementiert, sondern auch im Konstruktor eine Runnable-Implementierung übergeben bekommen kann.
Tatsächlich würde sich die Frage des OP von Anfang an gar nicht erst stellen, hätte Sun sich auf eine einheitliche Linie festgelegt (entweder muss Thread erweitert werden oder erwartet auf jeden Fall eine Runnable-Implementierung). Ich frage mich einfach, was der Grund dafür gewesen sein mag, da ich keinen erkennen kann.
 
Zuletzt bearbeitet von einem Moderator:
dass man ein Runnable-Interface implementieren kann ist ziemlich wichtig, fast unverzichtbar,
ansonsten wegen Vererbungsproblem viele unnötige separate Thread-Klassen mit Übergabe des Haupt-Objektes, unschönen Zugriff usw., das wäre ja schrecklich,
zudem braucht man so ein Mini-Interface für Übergabe an Excecutor usw., gäbe es nicht Runnable müsste man ein neues erfinden,
und könnte damit letztlich auch das Problem eine Zeile darüber lösen,
ohne Runnable-Interface wäre die Welt nicht schön,

also bleibt von deiner Frage höchstens der Teil, das Erben von Thread zu verhindern,
das wäre nicht ganz so schlimm, wann immer man das Thread-Objekt braucht könnte man es sich zu Beginn der run-Methode mit
Thread.currentThread() holen,
ab und zu braucht man es durchaus, z.B. wenn man mit interrupted arbeitet, gibt eigentlich keinen Grund diese Vererbung zu verbieten,

dass ständig Leute diese Frage stellen und vielleicht bei ersten Programmen damit Fehler machen finde ich nicht kritisch,
ist ein interessanter Bestandteil der Sprache, bei Betrachtung dieser Konzepte lernt man gut allgemein etwas zu Klassen und Interface usw.,
hat seine guten Seiten

edit:
Thread selber muss nicht unbedingt Runnable sein, dieser zuletzt auch genannte Punkt finde ich schon etwas bedenklicher
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben