如何在 Java 中獲取當前執行執行緒的 ID?


在 Java 中,併發程式設計通常涉及管理多個執行緒並區分它們。執行緒管理的一個關鍵方面是獲取當前執行執行緒的唯一識別符號。瞭解如何獲取當前執行執行緒的 ID 對於跟蹤執行緒行為、同步和除錯等任務至關重要。本教程將探討各種 Java 方法來實現這一點。

執行緒

Java 的執行緒是程式中輕量級的執行單元,提供任務的並行執行並提供其中一個順序控制流,允許程式同時執行多個操作。每個執行緒在其程式內獨立執行,同時共享來自同一程式的記憶體空間和資源。透過利用執行緒,開發人員可以實現並行性以提高應用程式的效能。

執行緒可以透過擴充套件 Thread 類或實現其 Runnable 介面來建立,並且可以併發、協作或任何組合方式執行。同步機制(如鎖和訊號量)可用於協調它們的執行,以避免多個執行緒之間發生衝突。

class MyThread extends Thread {
   public void run() {
      // Code to be executed in the thread
   }
}

方法

有各種 Java 方法可用於獲取當前執行執行緒的 ID。以下是三種常用的方法

  • Thread.currentThread().getId() 方法

  • 實現 Runnable 方法

  • 擴充套件 Thread 方法

使用 Thread.currentThread().getId() 方法

Java 允許使用 Thread.currentThread().getId() 方法直接檢索當前正在執行的執行緒的 ID。這將返回一個不透明的 long 值,表示其唯一 ID;透過在程式碼中呼叫此方法,您可以獲取此值並將其用於各種目的,例如區分在多執行緒應用程式中執行的執行緒、跟蹤執行或圍繞特定執行緒建立特定邏輯。總的來說,Thread.currentThread().getId() 提供了一種易於訪問的方式來獲取執行緒 ID,以便在 Java 應用程式中有效地管理和協調執行緒。

演算法

  • 定義一個函式 factorial(n),接收一個整數作為輸入,並返回其階乘積作為輸出。

  • 如果 n 為 0,則返回 1(基本情況)。

  • 否則,使用階乘函式和一個整數乘數(例如 1-1),代替乘法符號來乘以 N-1 的整數值。

  • 提交結果並結束。

程式

public class CurrentThreadExample {
   public static void main(String[] args) {
      Thread currentThread = Thread.currentThread();
      long threadId = currentThread.getId();
      String threadName = currentThread.getName();
      System.out.println("Current thread ID: " + threadId);
      System.out.println("Current thread name: " + threadName);
   }
}

輸出

Current thread ID: 1
Current thread name: main

實現 Runnable 方法

Java 的 Runnable 介面使開發人員能夠在不同的執行緒中併發地定義和執行程式碼。透過實現它,可以執行需要併發執行的封裝程式碼,使用 run() 作為其唯一方法。

run() 方法表示每個執行緒的入口點,包含將在啟動執行緒時實現的指令或邏輯。在這裡,您可以定義任何所需的 رفتار,例如執行計算、訪問共享資源或執行一系列任務。

演算法

  • 將 Factorial 初始化為 1,並讀取數字輸入 n

  • 如果 n 小於零,則顯示錯誤訊息並退出。

  • 如果 n 為零或一,則其階乘為一,您應該顯示並退出。

  • 將階乘乘以 i,i 必須介於二到九之間。

  • 顯示階乘作為結果。

程式

public class CurrentThreadExample implements Runnable {
   public void run() {
      long threadId = Thread.currentThread().getId();
      String threadName = Thread.currentThread().getName();
      System.out.println("Current thread ID: " + threadId);
      System.out.println("Current thread name: " + threadName);
   }

   public static void main(String[] args) {
      CurrentThreadExample example = new CurrentThreadExample();
      Thread thread = new Thread(example);
      thread.start();
   }
}

輸出

Current thread ID: 32
Current thread name: Thread-0

擴充套件 Thread 方法

擴充套件 Java Thread 類使您可以建立一個自定義類,該類繼承了 Thread 類的所有屬性和方法,包括其 run() 方法來管理失控執行緒。透過擴充套件 Thread,您可以為具有特定特徵的各個執行緒覆蓋此方法,定義它們在 run() 呼叫期間的行為。

擴充套件 Thread 類使獲取正在進行的執行緒的 ID 變得更加簡單,因為您可以直接訪問其 getId() 方法,而無需建立單獨的例項並將 Runnable 物件作為輸入引數傳遞。當透過覆蓋的 run() 方法直接檢索其 ID 或從覆蓋的方法內部呼叫 Thread.currentThread().getId() 時,您將很容易獲得其標識。

演算法

  • 讀取輸入數字 n 並建立一個擴充套件 Thread 類的自定義類。

  • 替換自定義類中的 run() 方法。

  • 在 run() 方法中,將階乘初始化為 1。

  • 如果 n 小於 0,則會生成錯誤訊息並退出。

  • 如果 n = 0、1、2 或 3,則顯示並退出。

  • 重複 2 到 n 次迭代,同時在每次迭代期間將階乘乘以當前數字。

  • 顯示階乘的最終值作為結果。

  • 建立自定義類的例項。

  • 使用 start() 方法啟動一個新執行緒。

程式

public class CurrentThreadExample extends Thread {
   public void run() {
      long threadId = this.getId();
      String threadName = this.getName();
      System.out.println("Current thread ID: " + threadId);
      System.out.println("Current thread name: " + threadName);
   }

   public static void main(String[] args) {
      CurrentThreadExample example = new CurrentThreadExample();
      example.start();
   }
}

輸出

Current thread ID: 32
Current thread name: Thread-0

結論

在本教程中,我們瞭解瞭如何透過使用不同的技術來獲取 Java 中當前執行執行緒的 ID。透過這樣做,開發人員能夠透過檢索執行緒 ID 來區分併發程式中的執行緒;跟蹤執行緒行為以分析或除錯多執行緒應用程式也可能成為可能,以及實現與它們相關的特定邏輯。理解和使用此類方法使開發人員能夠在開發 Java 應用程式時有效地利用執行緒。

更新於: 2023-07-25

862 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告