Ottieni l'ID thread in Java

Rupam Yadav 12 ottobre 2023
  1. Ottieni ID thread utilizzando Thread.getId() in Java
  2. Ottieni l’ID del pool di thread corrente utilizzando Thread.currentThread().getId() in Java
Ottieni l'ID thread in Java

In questo tutorial, introdurremo metodi per ottenere l’ID del thread in Java. Vedremo anche come possiamo ottenere l’id del thread corrente da un pool di thread.

Ottieni ID thread utilizzando Thread.getId() in Java

In questo esempio, abbiamo creato una classe Task che implementa la classe Runnable perché abbiamo bisogno del suo metodo run() per eseguire il thread. La classe Task prende il nome di un thread dal suo costruttore e il metodo run() lo stampa sulla console quando viene eseguito.

Nel metodo main(), creiamo due oggetti Task nel costruttore e poi due oggetti thread in cui passiamo task1 e task2 per assegnare i compiti.

Chiameremo il metodo start() usando thread1 e thread2 per eseguire i thread. Alla fine, una volta che i thread sono stati eseguiti, possiamo ottenere l’id di ogni thread usando thread.getId(), che restituisce l’id come 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);
  }
}

Produzione:

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

Ottieni l’ID del pool di thread corrente utilizzando Thread.currentThread().getId() in Java

I pool di thread sono utili quando si tratta di eseguire attività pesanti. Nell’esempio seguente, creiamo un pool di thread utilizzando Executors.newFixedThreadPool(numberOfThreads). Possiamo specificare il numero di thread che vogliamo nel pool.

La classe Task è responsabile dell’esecuzione del thread nel metodo run(). È una semplice classe che imposta e ottiene il nome del thread passato nel costruttore. Per creare più attività, usiamo un cicli for in cui vengono creati cinque oggetti Task e cinque thread vengono eseguiti nel pool.

Il nostro obiettivo è ottenere l’id di ogni thread attualmente in esecuzione. Per farlo, useremo Thread.currentThread().getId() che restituisce l’id del thread corrente. Nell’output, possiamo vedere gli ID di tutti i thread che eseguono le singole attività.

Una volta completate le attività, dovremmo interrompere l’esecuzione del pool di thread utilizzando threadExecutor.shutdown(). !threadExecutor.isTerminated() è usato per aspettare che il threadExecutor sia terminato.

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

Produzione:

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

Articolo correlato - Java Thread