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