# Thread oder Runnable?



## TKausL (31. Dez 2010)

Hallo,


```
class KLASSENNAME extends Thread
```


```
class KLASSENNAME implements Runnable
```

Diese beiden Klassen kenne ich. Beide müssen eine Methode "run" enthalten. Jedoch, wo ist der unterschied?


----------



## Landei (31. Dez 2010)

Runnable ist flexibler. Da Java bekanntlich nur Einfachvererbung unterstützt, kannst du bei [c]extends Thread[/c] von keiner anderen Klasse mehr ableiten, selbst wenn es furchtbar nützlich wäre. 

Ein weiterer Punkt ist ein "philosophischer": Wenn du irgend eine Klasse von Thread ableitest, sagst du damit "meine Klasse *ist* ein (spezieller) Thread", aber das wird nur in den wenigsten Fällen wirklich der Fall sein, z.B. ist ein Auto in einer Simulation oder ein  speisender Philosoph kein Thread, sondern es sind nur Klassen, die für parallele Abarbeitung angelegt sind. Solche Eigenschaften werden besser durch Interfaces ausgedrückt: Ein Auto kann sich wie ein Runnable *verhalten*.


----------



## TKausL (31. Dez 2010)

Also bräuchte man extends Thread im prinzip garnicht, man könnte überall implements Runnable nutzen, seh ich das richtig?


----------



## eRaaaa (31. Dez 2010)

Ja in den meisten Fällen schon (wenn du wirklich nur 
	
	
	
	





```
run
```
 überschreiben willst)
Ein Auszug aus der Javadoc zu Runnable


			
				http://download.oracle.com/javase/6/docs/api/java/lang/Runnable.html hat gesagt.:
			
		

> In most cases, the Runnable interface should be used* if you are only planning to override the run() method and no other Thread methods*. This is important because classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class.


----------

