「原創宣告:保留所有權利,禁止轉載」
Java 多執行緒實現
Java 多執行緒有多種實現方式,在測試工作中最常用的有兩種:
- 繼承
java.lang.Thread
類 - 實現
java.lang.Runnable
介面
1. 繼承 Thread
類
透過繼承 java.lang.Thread
實現 Java 多執行緒的步驟如下:
- 定義一個繼承自
Thread
的子類,並重寫run()
方法。 - 在
run()
方法中編寫多執行緒執行的程式碼邏輯。 - 建立
Thread
子類的例項,呼叫start()
方法啟動新執行緒。
示例程式碼
package org.funtester.performance.books.chapter01.section2;
/**
* 繼承 {@link Thread} 實現 Java 多執行緒
*/
public class FunThreadFirst extends Thread {
/**
* 主執行緒
* @param args
*/
public static void main(String[] args) {
new FunThreadFirst().start(); // 啟動執行緒
System.out.println("Hello FunTester! " + Thread.currentThread().getName()); // 列印執行緒名稱
}
/**
* 重寫 {@link Thread#run()} 方法
*/
@Override
public void run() {
try {
Thread.sleep(100); // 睡眠 100 毫秒
} catch (InterruptedException e) {
e.printStackTrace(); // 列印異常堆疊
}
System.out.println("Hello FunTester! " + Thread.currentThread().getName()); // 列印執行緒名稱
}
}
控制檯輸出
Hello FunTester! main
Hello FunTester! Thread-0
我們在 run()
方法中增加了 100ms 的休眠,這樣 main
執行緒的輸出會優先於我們建立的多執行緒 Thread-0
輸出,表明 main
執行緒與 Thread-0
是併發執行的,非阻塞。
2. 實現 Runnable
介面
透過實現 java.lang.Runnable
介面實現 Java 多執行緒的步驟如下:
- 定義一個類,並實現
Runnable
介面的run()
方法。 - 在
run()
方法中編寫多執行緒執行邏輯。 - 建立
Runnable
實現類物件,並傳遞給Thread
構造方法建立執行緒物件,然後啟動執行緒。
示例程式碼
package org.funtester.performance.books.chapter01.section2;
/**
* 實現 {@link Runnable} 介面實現 Java 多執行緒
*/
public class FunThreadSecond implements Runnable {
/**
* 主執行緒
* @param args
*/
public static void main(String[] args) {
FunThreadSecond second = new FunThreadSecond(); // 建立 Runnable 例項
new Thread(second).start(); // 啟動執行緒
System.out.println("Hello FunTester! " + Thread.currentThread().getName()); // 列印執行緒名稱
}
/**
* 重寫 {@link Runnable#run()} 方法
*/
@Override
public void run() {
try {
Thread.sleep(100); // 睡眠 100 毫秒
} catch (InterruptedException e) {
e.printStackTrace(); // 列印異常堆疊
}
System.out.println("Hello FunTester! " + Thread.currentThread().getName()); // 列印執行緒名稱
}
}
控制檯輸出
Hello FunTester! main
Hello FunTester! Thread-0
同樣地,輸出順序表明兩個執行緒的執行程式碼相互不干擾,是非阻塞的。
3. 使用 Lambda 表示式實現多執行緒
在 Java 8 中,可以使用 Lambda 表示式實現多執行緒。這種方式是實現 Runnable
介面的簡化變種,語法更加簡潔,在後續執行緒池中使用時也非常常見。
示例程式碼
package org.funtester.performance.books.chapter01.section2;
/**
* 使用 Lambda 表示式實現 Java 多執行緒
*/
public class FunThreadThird {
/**
* 主執行緒
* @param args
*/
public static void main(String[] args) {
new Thread(() -> System.out.println("Hello FunTester! " + Thread.currentThread().getName())).start(); // 建立並啟動執行緒
System.out.println("Hello FunTester! " + Thread.currentThread().getName()); // 列印執行緒名稱
}
}
控制檯輸出
Hello FunTester! main
Hello FunTester! Thread-0
總結
-
繼承
Thread
類:適合需要擴充套件Thread
類功能的場景,但 Java 不支援多繼承,限制了類的設計。 -
實現
Runnable
介面:更靈活,適合多個執行緒共享同一任務邏輯的場景。 - 使用 Lambda 表示式:語法簡潔,推薦在支援 Java 8 的專案中使用。
每種方法都有其適用場景,根據實際需求選擇合適的實現方式。
書的名字:從 Java 開始做效能測試 。
如果本書內容對你有所幫助,希望各位多多讚賞,讓我可以貼補家用。讚賞兩位數可以提前閱讀未公開章節。我也會嘗試製作本書的影片教程,包括必要的答疑。
FunTester 原創精華
- 混沌工程、故障測試、Web 前端
- 服務端功能測試
- 效能測試專題
- Java、Groovy、Go
- 白盒、工具、爬蟲、UI 自動化
- 理論、感悟、影片
如果覺得我的文章對您有用,請隨意打賞。您的支援將鼓勵我繼續創作!
打賞支援
暫無回覆。