Heim  >  Artikel  >  Java  >  Ist Java Multi-Threaded?

Ist Java Multi-Threaded?

(*-*)浩
(*-*)浩Original
2019-11-09 13:44:393268Durchsuche

Java ist Multithreading. Es gibt drei Möglichkeiten, Multithreading zu verwenden: die Thread-Klasse erben, die Runnable-Schnittstelle implementieren und Callable und Future zum Erstellen von Threads verwenden.

Ist Java Multi-Threaded?

Thread-Klasse erben (Empfohlenes Lernen: Java-Kurs )

Die Implementierung der Methode ist sehr einfach. Sie müssen lediglich eine Klasse erstellen, um die Thread-Klasse zu erben, und dann die Ausführungsmethode neu schreiben. Rufen Sie in der Hauptmethode die Startmethode des Klasseninstanzobjekts auf, um Multithread-Parallelität zu erreichen. Code:

public class MyThread extends Thread {
    @Override
    public void run(){
        super.run();
        System.out.println("执行子线程...");
    }
}

Testfall:

public class Test {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        System.out.println("主线程...");
    }
}

Laufergebnis:

Ist Java Multi-Threaded?

Implementieren Sie die Runnable-Schnittstelle

Die Implementierung dieser Methode ist ebenfalls sehr einfach, nämlich die Vererbung der Thread-Klasse zu ändern, um die Runnable-Schnittstelle zu implementieren. Der Code lautet wie folgt:

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("执行子线程...");
    }
}

Testfall:

public class Test {
    public static void main(String[] args) {
        Runnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("主线程运行结束!");
    }
}

Laufergebnis:

Ist Java Multi-Threaded?

Verwenden Sie Callable und Future, um Threads zu erstellen

Die beiden oben genannten Methoden weisen diese beiden Probleme auf:

Der Rückgabewert von kann nicht abgerufen werden untergeordneter Thread

Die Ausführungsmethode kann keine Ausnahmen auslösen

Um diese beiden Probleme zu lösen, müssen wir die Callable-Schnittstelle verwenden. Apropos Schnittstellen: Die obige Instanz der Runnable-Schnittstellenimplementierungsklasse wird als Parameter des Konstruktors der Thread-Klasse übergeben und dann wird der Inhalt in der Ausführungsmethode durch den Start von Thread ausgeführt. Callable ist jedoch keine Unterschnittstelle von Runnable, sondern eine brandneue Schnittstelle. Ihre Instanz kann nicht direkt an das Thread-Konstrukt übergeben werden, daher ist eine andere Schnittstelle erforderlich, um sie zu konvertieren.

In diesem Fall gibt es tatsächlich einen Konvertierungsvorgang mehr als bei der vorherigen Methode. Am Ende wird durch den Thread-Start ein neuer Thread erstellt. Mit dieser Idee ist der Code leicht zu verstehen:

import java.util.concurrent.Callable;
public class MyCallable implements Callable {
    int i = 0;
    @Override
    public Object call() throws Exception {
        System.out.println(Thread.currentThread().getName()+"  i的值:"+ i);
        return i++; //call方法可以有返回值
    }
}

Test:

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Test {
    public static void main(String[] args) {
        Callable callable = new MyCallable();
        for (int i = 0; i < 10; i++) {
            FutureTask task = new FutureTask(callable);
            new Thread(task,"子线程"+ i).start();
            try {
                //获取子线程的返回值
                System.out.println("子线程返回值:"+task.get() + "\n");
            }  catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Ausführungsergebnis (Teil):

Ist Java Multi-Threaded?

Das obige ist der detaillierte Inhalt vonIst Java Multi-Threaded?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn