如何向 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:** 允許為更復雜的使用案例傳遞引數和檢索結果。

每種方法都提供了獨特的優勢,使開發人員能夠在多執行緒應用程式中有效地處理引數。

更新於: 2024年11月21日

1 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告