多執行緒的三種介面
阿新 • • 發佈:2021-11-19
三種建立方式
-
Thread class 繼承 Thread 類(重點)
-
Runnable 介面 實現 Runnable 介面(重點)
-
Callable 介面 實現 Callable 介面(瞭解)
Thread
-
自定義執行緒類繼承 Thread 類
-
重寫 run() 方法,編寫執行緒執行體
-
建立執行緒物件,呼叫 start() 方法啟動執行緒
package Thread;
//建立執行緒方式一:繼承Thread類,重寫run方法,呼叫start開啟執行緒
//總結:注意,執行緒開啟不一定立即執行,,由CPU排程執行
public class TestThread1 extends Thread{
Runnable
-
定義MyRunnable類實現Runnable介面
-
實現run()方法,編寫執行緒執行體
-
建立執行緒物件,呼叫start()方法啟動執行緒
package Thread;
//建立執行緒方式2:實現runnable介面,重寫run方法,執行執行緒需要丟入runnable介面實現類,呼叫start方法
public class TestThread2 implements Runnable {
public void run() {
//run方法執行緒體
for (int i = 0; i < 800; i++) {
System.out.println("我在看程式碼---"+i);
}
}
public static void main(String[] args) {
//建立runnable介面的實現類物件
TestThread2 testThread2 = new TestThread2();
//建立一個執行緒物件,通過執行緒物件來開啟我們的執行緒,代理
// Thread thread = new Thread();
// thread.start();
new Thread(testThread2).start();
for (int i = 0; i < 2000; i++) {
System.out.println("我在學習多執行緒---"+i);
}
}
}
小結
-
繼承Thread類
-
子類繼承Thread類具備多執行緒能力
-
啟動執行緒:子類物件. start()
-
不建議使用:避免OOP單繼承侷限性
-
-
實現Runnable介面
-
實現介面Runnable具有多執行緒能力
-
啟動執行緒:傳入目標物件+Thread物件.start()
-
推薦使用:避免單繼承侷限性,靈活方便,方便同一個物件被多個執行緒使用
-
實現Callable介面(瞭解即可)
-
實現Callable介面,需要返回值型別
-
重寫call方法,需要丟擲異常
-
建立目標物件
-
建立執行服務:ExecutorService ser = Executors.newFixedThreadPool(1);
-
提交執行:Future<Boolean> result1 = ser.submit(t1);
-
獲取結果: boolean r1 = result1.get();
-
關閉服務: ser.shutdownNow();