在 Java 中獲取執行緒 ID
在本教程中,我們將介紹 Java 中獲取執行緒 id 的方法。我們還將看到如何從執行緒池中獲取當前執行緒的 id。
在 Java 中使用 Thread.getId()
獲取執行緒 id 的方法
在這個例子中,我們建立了一個實現了 Runnable
類的 Task
類,因為我們需要它的 run()
方法來執行執行緒。Task
類從它的建構函式中獲取一個執行緒名,run()
方法在執行時將其列印在控制檯。
在 main()
方法中,我們在建構函式中建立了兩個 Task
物件,然後建立兩個執行緒物件,其中傳遞 task1
和 task2
來分配任務。
我們將使用 thread1
和 thread2
呼叫 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn