Thread-ID in Java abrufen
-
Ermitteln der Thread-ID mit
Thread.getId()
in Java -
Aktuelle Thread-Pool-Id mit
Thread.currentThread().getId()
in Java ermitteln
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn