在 Java 中獲取執行緒 ID

Rupam Yadav 2023年10月12日
  1. 在 Java 中使用 Thread.getId() 獲取執行緒 id 的方法
  2. 在 Java 中使用 thread.currentThread().getId() 獲取當前執行緒池的 id
在 Java 中獲取執行緒 ID

在本教程中,我們將介紹 Java 中獲取執行緒 id 的方法。我們還將看到如何從執行緒池中獲取當前執行緒的 id。

在 Java 中使用 Thread.getId() 獲取執行緒 id 的方法

在這個例子中,我們建立了一個實現了 Runnable 類的 Task 類,因為我們需要它的 run() 方法來執行執行緒。Task 類從它的建構函式中獲取一個執行緒名,run() 方法在執行時將其列印在控制檯。

main() 方法中,我們在建構函式中建立了兩個 Task 物件,然後建立兩個執行緒物件,其中傳遞 task1task2 來分配任務。

我們將使用 thread1thread2 呼叫 start() 方法來執行執行緒。最後,當執行緒執行完畢後,我們可以使用 thread.getId() 獲取每個執行緒的 id,該方法將 id 以 long 的形式返回。

public class GetThreadID {
  public static void main(String[] args) {
    Task task1 = new Task("Task 1");
    Task task2 = new Task("Task 2");

    Thread thread1 = new Thread(task1);
    Thread thread2 = new Thread(task2);

    thread1.start();
    thread2.start();

    System.out.println("Thread1's ID is: " + thread1.getId());
    System.out.println("Thread2's ID is: " + thread2.getId());
  }
}

class Task implements Runnable {
  private String name;

  Task(String name) {
    this.name = name;
  }

  @Override
  public void run() {
    System.out.println("Executing " + name);
  }
}

輸出:

Thread1's ID is: 13
Thread2's ID is: 14
Executing Task 2
Executing Task 1

在 Java 中使用 thread.currentThread().getId() 獲取當前執行緒池的 id

執行緒池在大量執行任務的時候是有好處的。在下面的例子中,我們使用 Executors.newFixedThreadPool(numberOfThreads) 建立一個執行緒池。我們可以指定池中我們想要的執行緒數量。

Task 類負責執行 run() 方法中的執行緒。它是一個簡單的類,可以設定和獲取在建構函式中傳遞的執行緒名稱。為了建立多個任務,我們使用一個 for 迴圈,在這個迴圈中建立五個 task 物件,並在池中執行五個執行緒。

我們的目標是獲取當前正在執行的每個執行緒的 id。為此,我們將使用 Thread.currentThread().getId() 來返回當前執行緒的 id。在輸出中,我們可以看到執行各個任務的所有執行緒的 id。

一旦任務完成,我們應該使用 threadExecutor.shutdown() 停止執行執行緒池。!threadExecutor.isTerminated() 用來等待 threadExecutor 停止。

package com.company;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class GetThreadID {
  public static void main(String[] args) {
    int numberOfThreads = 5;

    ExecutorService threadExecutor = Executors.newFixedThreadPool(numberOfThreads);

    for (int i = 0; i < 5; i++) {
      Task task = new Task("Task " + i);

      System.out.println("Created Task: " + task.getName());
      threadExecutor.execute(task);
    }
    threadExecutor.shutdown();

    while (!threadExecutor.isTerminated()) {
    }

    System.out.println("All threads have completed their tasks");
  }
}

class Task implements Runnable {
  private String name;

  Task(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  @Override
  public void run() {
    System.out.println("Executing: " + name);
    System.out.println(name + " is on thread id #" + Thread.currentThread().getId());
  }
}

輸出:

Created Task: Task 0
Created Task: Task 1
Created Task: Task 2
Created Task: Task 3
Created Task: Task 4
Executing: Task 0
Executing: Task 2
Executing: Task 1
Executing: Task 4
Executing: Task 3
Task 0 is on thread id #13
Task 1 is on thread id #14
Task 4 is on thread id #17
Task 2 is on thread id #15
Task 3 is on thread id #16
All threads have completed their tasks
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Thread