Welchen Sinn hat ein Runnable

5050

Neues Mitglied
Ein Runnable ist ja ein Interface, dass die Methode run() will. Da die Methode run() aber leer ist und ich sie fülle, versteh ich nicht ganz wofür ich ein Runnable brauche. Das was das Runnable am Ende ausführt, hätte das nicht auch jede x-beliebige selbstgeschriebene Methode ausführen können? Welchen Sinn hat ein Runnable?
Danke schon Mal im Voraus😉
 
Die Thread-Klasse ist eine direkte Abstraktion deiner CPU-Cores. Da unter einem Quad-Core z.B. nur 4 "echte" Kerne zur Verfügung stehen, du in einem Programm jedoch mal 10 Threads erzeugen möchtest, greifst du theoretisch gesehen auf 6 "virtuelle" Kerne zu.

Der Sinn hinter dem ganzen ist, dass dir die Thread-Klasse eine Ebene zum arbeiten anbietet, das Runnable, das hier verwendet wird, ist, wie du sagst, ein Interface mit der Run-Methode. Da Runnable aber nun rein auf Java-Seite anzusiedeln ist, die Thread-Klasse einen Spagat zwischen Java-Welt und der Maschine, ergibt sich bereits, dass die Thread-Klasse nicht ohne weiteres klonbar ist.

Im Klartext: Eine Thread-Klasse ist nicht wiederverwendbar, hauptsächlich, wegen diesem Bezug auf dein System.

Die Runnable-Implementierungen jedoch kannst du immer wiederverwenden, musst zur Ausführung lediglich eine neue Thread-Instanz erzeugen. Gleiches gilt auch für Threadpools, welche auch immer eine Runnable-Instanz erfordern und intern immer wiederverwenden können.
 
Das ganze ist sogar noch abstrakter: Threads sind nur irgendwas, was unabhängig voneinander ausgeführt wird. Die müssen (und haben sie mWn früher auch nicht) nicht mal einem nativem Thread entsprechen.

Das Threads nicht wiederverwendbar sind ist einfach nur eine Einschränkung der Klasse Thread, die nicht (zwingend auf jedem System) notwendig ist. Mit ein bisschen Reflection kann man Threads durchaus wieder neu starten 😉

Gleiches gilt auch für Threadpools, welche auch immer eine Runnable-Instanz erfordern und intern immer wiederverwenden können.
Eigentlich genau andersrum, die Threads werden wiederverwendet, und jedes Runnable nur einmal ausgeführt
 
Ohne überhaupt auf Threads einzugehen:

Versuche doch für dich zunächst einmal zu klären, was Interfaces überhaupt genau sind und wofür man sie einsetzt.
Stichworte: Polymorphism, Coupling
Weiter ausgeholt auch: Testbarkeit, Dependency Injection
 

Zurück
Oben