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.
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:
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:
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):
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!