1. 程式人生 > 其它 >多執行緒的三種介面

多執行緒的三種介面

三種建立方式

  1. Thread class 繼承 Thread 類(重點)

  2. Runnable 介面 實現 Runnable 介面(重點)

  3. Callable 介面 實現 Callable 介面(瞭解)

Thread

  • 自定義執行緒類繼承 Thread 類

  • 重寫 run() 方法,編寫執行緒執行體

  • 建立執行緒物件,呼叫 start() 方法啟動執行緒

package Thread;

//建立執行緒方式一:繼承Thread類,重寫run方法,呼叫start開啟執行緒

//總結:注意,執行緒開啟不一定立即執行,,由CPU排程執行
public class TestThread1 extends Thread{
@Override
public void run() {
//run方法執行緒體
for (int i = 0; i < 800; i++) {

System.out.println("我在看程式碼---"+i);
}

}

public static void main(String[] args) {
//main執行緒,主執行緒

//建立一個執行緒物件
TestThread1 testThread1 = new TestThread1();
//呼叫start開啟執行緒
testThread1.start();

for (int i = 0; i < 2000; i++) {
System.out.println("我在學習多執行緒---"+i);
}
}
}

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();