在 Java 中獲取執行緒 ID

Rupam Yadav 2023年1月30日 2020年12月31日
  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
Author: 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