2355 Stimmen

"implementiert Runnable" vs. "erweitert Thread" in Java

Nach der Zeit, die ich mit Threads in Java Ich habe diese beiden Möglichkeiten gefunden, Themen zu schreiben:

Mit implementiert Runnable :

public class MyRunnable implements Runnable {
    public void run() {
        //Code
    }
}
//Started with a "new Thread(new MyRunnable()).start()" call

Oder, mit erweitert Thread :

public class MyThread extends Thread {
    public MyThread() {
        super("MyThread");
    }
    public void run() {
        //Code
    }
}
//Started with a "new MyThread().start()" call

Gibt es einen signifikanten Unterschied zwischen diesen beiden Codeblöcken?

66 Stimmen

Vielen Dank für diese Frage, die Antworten haben eine Menge Missverständnisse, die ich hatte, aufgeklärt. Ich schaute in den richtigen Weg, um Java-Threads zu tun, bevor SO existierte und es gab eine Menge von Fehlinformationen / veraltete Informationen da draußen.

5 Stimmen

Gibt es einen Grund, warum Sie den Thread ( aber ich empfehle es nicht ), können Sie präventiv mit interrupt() . Auch hier handelt es sich um eine Idee, die im richtigen Fall nützlich sein könnte, aber ich empfehle sie nicht.

0 Stimmen

Bitte lesen Sie auch die Antwort, die sehr gut erklärt ist: stackoverflow.com/q/5562720/285594

0voto

Pen Lymeng Punkte 241

Der Hauptunterschied zwischen Thread und Runnable ist: - Thread ist wie: Worker (führt Runnable aus) - Runnable ist wie: Job (wird von Thread ausgeführt)

0voto

Yogesh Sharma Punkte 243

Wenn Sie Ihre Anliegen trennen wollen, z.B. wenn Sie Tasks erstellen wollen und es für Sie keine Rolle spielt, wer der Worker ist, der an Ihrem Task arbeitet, dann verwenden Sie Runnable und definieren Sie Ihre Arbeit als Task. Genau wie bei der Verwendung eines Executor-Dienstes definieren Sie Aufgaben in Form von Runnable/Callable und übergeben sie an den Executor-Dienst, der dann die Verantwortung für die Arbeiter übernimmt.

Wenn Sie selbst einen Worker erstellen und diesem Worker Ihre Aufgabe zuweisen wollen, wenn Sie mehr Kontrolle über den Worker-Thread haben wollen, dann verwenden Sie die Klasse Thread.

-1voto

Java Main Punkte 1355

Sie können sie gemeinsam nutzen

Beispiel:

public class A implements Runnable{

    @Override
    public void run() {

        while(true){
             System.out.println("Class A is running");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }}

    }

}

public class Test {

    public static void main(String[] args) {

        Thread myThread =new Thread(new A());// 1
        myThread.start();
        System.out.println(" executed after thread A");//will never be reached

    }

}

0 Stimmen

Ich habe dich nicht heruntergestuft, aber du musst einen Thread erstellen über new Thread(new A()) und rufen Sie start() Methode anstelle von run() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X