在 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