Heim >Java >javaLernprogramm >So verstehen Sie Threads in Java
Thread ist ein Ausführungspfad innerhalb eines Programms. Die uns bekannte Hauptmethode ist tatsächlich ein separater Ausführungspfad. dann Dieses Programm ist ein Single-Thread-Programm; da es einen Single-Thread gibt, wird es auch Multi-Threading geben. Die wörtliche Bedeutung kann als „eine Technologie, die mehrere Ausführungsprozesse auf Software und Hardware relativ zu einem Single-Threading verwendet“ verstanden werden. Thread". Die Vorteile von Multithreading sind #🎜🎜 #Verbesserung der CPU-Auslastung. Wenn in einem Multithread-Programm ein Thread warten muss, kann die CPU andere Threads ausführen, anstatt zu warten, was die Effizienz des Programms erheblich verbessert.
Erstellung von Multi-ThreadsMethode 1: Thread-Klasse erbenMethode 1 Erstellungsprozess: #🎜 🎜 #1 Definieren Sie eine Thread-Task-Klasse MyRunnable, um die Runnable-Schnittstelle zu implementieren und die Ausführung zu überschreiben () Methode;
öffentlicher Thread (ausführbares Ziel)
Kapseln Sie das ausführbare Objekt, um ein Thread-Objekt zu werden
# 🎜🎜#öffentlicher Thread (ausführbares Ziel, String-Name)#🎜 🎜#Kapseln Sie das ausführbare Objekt als Thread-Objekt und geben Sie den Thread-Namen an Das MyRunnable-Aufgabenobjekt muss in Thread gekapselt werden. Die anderen Stellen bleiben grundsätzlich unverändert.
Nachteile: Die Programmierung erfordert eine zusätzliche Ebene der Objektverpackung. Wenn der Thread Ausführungsergebnisse hat, kann er nicht direkt zurückgegeben werden. | Als nächstes verwenden wir auch die Runnable-Schnittstelle (anonyme innere Klassenform), um die Erstellung von Multithreads zu erreichen: |
2. Überlassen Sie es Thread zur Verarbeitung. | 3 Der große Unterschied besteht darin, dass ein Thread-Objekt erstellt werden muss. während die andere Multithreading durch anonyme innere Klassen ist. Und dieser Codeblock kann auch durch Lambda-Ausdrücke optimiert werden. Ich frage mich, ob Sie von diesem Wissenspunkt immer noch beeindruckt sind. Wenn Sie es vergessen haben, können Sie diesen Artikel lesen: So verstehen Sie Lambda-Ausdrücke in Java – Vereinfachung |
Nachdem Sie die beiden vorherigen Kreationen gelernt haben. Nach der Verwendung Bei der Multithreading-Methode werden wir feststellen, dass ein Problem vorliegt: 1. Die neu geschriebene run()-Methode kann keine Ergebnisse direkt zurückgeben. 2. Sie ist nicht für Geschäftsszenarien geeignet, die Thread-Ausführungsergebnisse zurückgeben müssen. Deshalb brauchen wir einen dritten Weg, um diese Probleme zu lösen. | Erstellungsprozess der dritten Methode: |
3. Übergeben Sie das Thread-Aufgabenobjekt zur Verarbeitung . Rufen Sie die start()-Methode von Thread auf, um die Aufgabe auszuführen. Nachdem die Thread-Ausführung abgeschlossen ist, erhalten Sie das Ergebnis der Aufgabenausführung über die get()-Methode von FutureTask. |
# 🎜 🎜#Erhalten Sie das Ergebnis, das vom Thread zurückgegeben wird, der die Aufrufmethode ausführt
public class ThreadDemo03 { public static void main(String[] args) throws Exception { MyCallable myCallable = new MyCallable(); FutureTask<String> futureTask = new FutureTask<>(myCallable); Thread thread = new Thread(futureTask); thread.start(); int sum= 0; for (int i = 0; i < 3; i++) { sum+=i; } System.out.println(sum); String s =futureTask.get(); System.out.println(s); } } class MyCallable implements Callable<String > { @Override public String call(){ int sum=0; for (int i = 0; i < 3; i++) { sum+=i; } return "子线程计算结果:"+sum; } } //输出结果: //3 //子线程计算结果:3
方式三优缺点:
优点:
线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强;
可以在线程执行完毕后去获取 线程执行的结果;
缺点:
编码复杂一点;
方式 | 优点 | 缺点 |
继承Thread类 | 编程比较简单,可以直接使用Thread类中的方法 | 扩展性较差,不能再继承其他的类,不能返回线程执行的结果 |
实现Runnable接口 | 扩展性强,实现该接口的同时还可以继承其他的类 | 编程相对复杂,不能返回线程执行的结果 |
实现Callable接口 | 扩展性强,实现该接口的同时还可以继承其他的类,可以得到线程的执行结果 | 编程相对复杂 |
方法名称 | 说明 |
String getName() | 获取当前线程的名称,默认线程名称是Thread-索引 |
void setName(String name) | 将此线程更改为指定的名称,通过构造器也可以设置线程名称 |
简单地通过一段代码让大家能够清晰地了解这个代码该如何使用:
public class ThreadDemo04 { public static void main(String[] args) throws Exception { thread thread1 = new thread(); thread1.setName("1号子线程"); thread1.start(); thread thread2 = new thread(); thread2.setName("2号子线程"); thread2.start(); } } class thread extends Thread { @Override public void run() { for (int i = 0; i < 3; i++) { System.out.println(this.getName()+"正在执行任务"+i); } } } //输出结果: //2号子线程正在执行任务0 //1号子线程正在执行任务0 //2号子线程正在执行任务1 //1号子线程正在执行任务1 //2号子线程正在执行任务2 //1号子线程正在执行任务2
方法名称 | 说明 |
public static void sleep(long time) | 让当前线程休眠指定的时间后再继续执行,单位为毫秒 |
public class ThreadDemo05 { public static void main(String[] args) throws Exception { for (int i = 0; i < 5; i++) { System.out.println(i); if (i==3){ Thread.sleep(5000); } } } } //输出结果: //1 //2 //3 //在输出过3以后,等待5秒之后再进行输出 //4
Das obige ist der detaillierte Inhalt vonSo verstehen Sie Threads in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!