如何向 Java 執行緒傳遞引數?
Java 執行緒對於在應用程式中實現高效的多工處理至關重要。通常,需要向執行緒傳遞引數,以便它們能夠根據動態輸入處理任務。本指南探討了向 Java 執行緒傳遞引數的各種方法,例如實現 **Runnable**、建立自定義執行緒類以及使用 Lambda 表示式。
使用自定義 Runnable 類傳遞引數
在自定義類中實現 Runnable 介面是向執行緒傳遞引數的一種簡單方法,可以透過在類中新增它們作為欄位來實現。此方法允許在建立執行緒時傳遞引數,方法是在類建構函式中包含它們。
示例
這裡,一個實現 **Runnable** 的 **Task** 類在其建構函式中接收一個引數
class Task implements Runnable { private String message; public Task(String message) { this.message = message; } @Override public void run() { System.out.println("Message from thread: " + message); } } public class Main { public static void main(String[] args) { Thread thread = new Thread(new Task("Hello, World!")); thread.start(); } }
輸出
Message from thread: Hello, World!
使用自定義執行緒子類傳遞引數
子類化 **Thread** 允許您為引數新增欄位或方法,在需要線上程中新增其他功能時提供靈活性。
示例
在此示例中,自定義 **Thread** 類接收一個引數
class CustomThread extends Thread { private int count; public CustomThread(int count) { this.count = count; } @Override public void run() { for (int i = 0; i < count; i++) { System.out.println("Count: " + i); } } } public class Main { public static void main(String[] args) { CustomThread thread = new CustomThread(5); thread.start(); } }
輸出
Count: 0 Count: 1 Count: 2 Count: 3 Count: 4
使用 Lambda 表示式傳遞引數
Java 8 引入了 Lambda 表示式,允許使用簡潔的程式碼在 **run** 塊中傳遞引數。
示例
使用 Lambda 表示式,您可以直接傳遞引數
public class Main { public static void main(String[] args) { String message = "Hello from Lambda!"; Thread thread = new Thread(() -> System.out.println("Message: " + message)); thread.start(); } }
輸出
Message: Hello from Lambda!
使用 Callable 和 Future 獲取返回值
使用 **java.util.concurrent** 中的 **Callable** 和 **Future**,您可以傳遞引數並在執行後檢索結果。
示例
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; class ParameterizedTask implements Callable<String> { private String message; public ParameterizedTask(String message) { this.message = message; } @Override public String call() { return "Processed: " + message; } } public class Main { public static void main(String[] args) throws Exception { FutureTask<String> futureTask = new FutureTask<>(new ParameterizedTask("Hello from Callable")); Thread thread = new Thread(futureTask); thread.start(); System.out.println("Result: " + futureTask.get()); } }
輸出
Result: Processed: Hello from Callable
總結
本文介紹了向 Java 執行緒傳遞引數的幾種方法
- **自定義 Runnable 類:** 使用最少的設定即可輕鬆傳遞引數。
- **自定義執行緒子類:** 當需要線上程中新增其他功能時很有用。
- **Lambda 表示式:** Java 8 及更高版本中用於引數化執行緒的簡潔語法。
- **Callable 和 Future:** 允許為更復雜的使用案例傳遞引數和檢索結果。
每種方法都提供了獨特的優勢,使開發人員能夠在多執行緒應用程式中有效地處理引數。
廣告