Thread-ID in Java abrufen

Rupam Yadav 12 Oktober 2023
  1. Ermitteln der Thread-ID mit Thread.getId() in Java
  2. Aktuelle Thread-Pool-Id mit Thread.currentThread().getId() in Java ermitteln
Thread-ID in Java abrufen

In diesem Tutorial werden wir Methoden vorstellen, um die Thread-ID in Java zu erhalten. Wir werden auch sehen, wie wir die ID des aktuellen Threads aus einem Thread-Pool erhalten können.

Ermitteln der Thread-ID mit Thread.getId() in Java

In diesem Beispiel haben wir eine Klasse Task erstellt, die die Klasse Runnable implementiert, weil wir ihre Methode run() benötigen, um den Thread auszuführen. Die Klasse Task nimmt in ihrem Konstruktor einen Thread-Namen entgegen, und die Methode run() gibt ihn bei der Ausführung auf der Konsole aus.

In der Methode main() erstellen wir zwei Task-Objekte im Konstruktor und dann zwei Thread-Objekte, denen wir task1 und task2 übergeben, um die Aufgaben zuzuordnen.

Wir rufen die Methode start() mit thread1 und thread2 auf, um die Threads auszuführen. Wenn die Threads ausgeführt wurden, können wir schließlich die ID jedes Threads mit thread.getId() ermitteln, die die ID als long zurückgibt.

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);
  }
}

Ausgabe:

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

Aktuelle Thread-Pool-Id mit Thread.currentThread().getId() in Java ermitteln

Thread-Pools sind vorteilhaft, wenn es um die schwere Ausführung von Aufgaben geht. Im folgenden Beispiel erstellen wir einen Thread-Pool mit Executors.newFixedThreadPool(numberOfThreads). Wir können die Anzahl der Threads angeben, die wir im Pool haben wollen.

Die Klasse Task ist für die Ausführung des Threads in der Methode run() verantwortlich. Sie ist eine einfache Klasse, die den im Konstruktor übergebenen Namen des Threads setzt und erhält. Um mehrere Tasks zu erstellen, verwenden wir eine for-Schleife, in der fünf Task-Objekte erstellt werden und fünf Threads im Pool ausgeführt werden.

Unser Ziel ist es, die ID jedes Threads zu erhalten, der gerade ausgeführt wird. Dazu verwenden wir Thread.currentThread().getId(), das die Kennung des aktuellen Threads zurückgibt. In der Ausgabe können wir die IDs aller Threads sehen, die die einzelnen Tasks ausführen.

Sobald die Aufgaben abgeschlossen sind, sollten wir die Ausführung des Thread-Pools mit threadExecutor.shutdown() beenden. Mit !threadExecutor.isTerminated() wird gewartet, bis der threadExecutor beendet ist.

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());
  }
}

Ausgabe:

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 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

Verwandter Artikel - Java Thread