在 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