Obtenir ID de thread en Java

  1. Obtenir l’ID de thread en utilisant Thread.getId() en Java
  2. Obtenir l’ID du pool de threads actuel à l’aide de Thread.currentThread().GetId() en Java

Dans ce tutoriel, nous présenterons les méthodes pour obtenir l’ID de thread en Java. Nous verrons également comment nous pouvons obtenir l’id du thread actuel à partir d’un pool de threads.

Obtenir l’ID de thread en utilisant Thread.getId() en Java

Dans cet exemple, nous avons créé une classe Task qui implémente la classe Runable car nous avons besoin de sa méthode run() pour exécuter le thread. La classe Task prend un nom de thread de son constructeur, et la méthode run() l’imprime sur la console lorsqu’elle est exécutée.

Dans la méthode main(), nous créons deux objets Task dans le constructeur et ensuite deux objets threads dans lesquels nous passons task1 et task2 pour assigner les tâches.

Nous appellerons la méthode start() en utilisant thread1 et thread2 pour exécuter les threads. Enfin, une fois que les threads ont été exécutés, nous pouvons obtenir l’identifiant de chaque thread en utilisant thread.getId(), qui renvoie l’identifiant sous la forme d’un 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);
    }
}

Production :

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

Obtenir l’ID du pool de threads actuel à l’aide de Thread.currentThread().GetId() en Java

Les pools de filières sont bénéfiques lorsqu’il s’agit d’exécuter des tâches lourdes. Dans l’exemple ci-dessous, nous créons un groupe de discussion en utilisant Executors.newFixedThreadPool(numberOfThreads). Nous pouvons spécifier le nombre de threads que nous voulons dans le pool.

La classe Task est responsable de l’exécution du thread dans la méthode run(). C’est une simple classe qui définit et récupère le nom du fil de discussion passé dans le constructeur. Pour créer des tâches multiples, nous utilisons une boucle for dans laquelle cinq objets task sont créés, et cinq threads sont exécutés dans le pool.

Notre objectif est d’obtenir l’identifiant de chaque thread en cours d’exécution. Pour ce faire, nous utiliserons Thread.currentThread().GetId() qui renvoie l’identifiant du fil courant. Dans la sortie, nous pouvons voir les id de tous les threads qui exécutent les tâches individuelles.

Une fois les tâches terminées, nous devrions arrêter d’exécuter le pool de threads en utilisant threadExecutor.shutdown(). !threadExecutor.isTerminated() est utilisé pour attendre que le threadExecutor soit terminé.

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

    }
}

Production :

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

Article connexe - Java Thread

  • Tuer Thread en Java