【連載 02】多執行緒實現
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 自動化
- 理論、感悟、影片
相關文章
- 多執行緒Day02執行緒
- C#多執行緒開發-執行緒同步 02C#執行緒
- 如何實現多執行緒執行緒
- Java多執行緒檔案分片下載實現Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- 多執行緒實現多工二執行緒
- 多執行緒實現多工一執行緒
- Java多執行緒的實現Java執行緒
- Java多執行緒實現方式Java執行緒
- 【unity】 Loom實現多執行緒UnityOOM執行緒
- JavaScript如何實現多執行緒?JavaScript執行緒
- Runnable介面實現多執行緒執行緒
- 多執行緒具體實現執行緒
- 多執行緒爬蟲實現(上)執行緒爬蟲
- 用Pthread實現多執行緒操作thread執行緒
- [02] 多執行緒邏輯程式設計執行緒程式設計
- 【PyQt5】PyQt5 多執行緒 QThread 實現(轉載)QT執行緒thread
- [PyQt5] PyQt5 多執行緒 QThread 實現(轉載)QT執行緒thread
- 面試-實現多執行緒的方式面試執行緒
- 【QT】QtConcurrent::run()+QThreadPool實現多執行緒QTthread執行緒
- 純Mutex實現多執行緒交替列印Mutex執行緒
- 用多執行緒,實現併發,TCP執行緒TCP
- Python簡單實現多執行緒例子Python執行緒
- Java多執行緒【三種實現方法】Java執行緒
- 多執行緒伺服器的實現執行緒伺服器
- 多執行緒基礎-基礎實現執行緒
- 5招教你實現多執行緒場景下的執行緒安全!執行緒
- Java高併發與多執行緒(二)-----執行緒的實現方式Java執行緒
- 多執行緒和多執行緒同步執行緒
- Java之實現多執行緒的方式三:實現Callable介面(結合執行緒池使用)Java執行緒
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- 多執行緒下載檔案執行緒
- ftp多執行緒下載工具FTP執行緒
- Java多執行緒下載分析Java執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- Java多執行緒之守護執行緒實戰Java執行緒