Obter Thread Id em Java

Rupam Yadav 12 outubro 2023
  1. Obter o id do thread utilizando Thread.getId() em Java
  2. Obter o id do grupo de discussão actual utilizando Thread.currentThread().getId() em Java
Obter Thread Id em Java

Neste tutorial, iremos introduzir métodos para obter a identificação do tópico em Java. Veremos também como podemos obter o id do tópico actual a partir de um array de tópicos.

Obter o id do thread utilizando Thread.getId() em Java

Neste exemplo, criámos uma classe Task que implementa a classe Runnable porque precisamos do seu método run() para executar o string. A classe Task toma um nome de thread do seu construtor, e o método run() imprime-o na consola quando é executado.

No método main(), criamos dois objectos Task no construtor e depois dois objectos de threads nos quais passamos task1 e task2 para atribuir as tarefas.

Chamaremos o método start() usando thread1 e thread2 para executar os threads. Finalmente, uma vez executados os tópicos, podemos obter o id de cada tópico utilizando thread.getId(), que devolve o id como um 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);
  }
}

Resultado:

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

Obter o id do grupo de discussão actual utilizando Thread.currentThread().getId() em Java

As piscinas de roscas são benéficas quando se trata da execução pesada de tarefas. No exemplo abaixo, criamos um pool de strings utilizando Executors.newFixedThreadPool(numberOfThreads). Podemos especificar o número de threads que queremos no pool.

A classe Task é responsável pela execução do string no método run(). É uma classe simples que define e faz passar o nome do tópico no construtor. Para criar múltiplas tarefas, utilizamos um laço for em que cinco objectos task são criados, e cinco threads são executados no pool.

O nosso objectivo é obter a identificação de cada linha que está a ser executada actualmente. Para isso, utilizaremos Thread.currentThread().getId() que devolve o id do tópico actual. Na saída, podemos ver os ids de todos os threads que executam as tarefas individuais.

Uma vez concluídas as tarefas, devemos parar de executar o array de threads utilizando threadExecutor.shutdown(). !threadExecutor.isTerminated() é utilizado para esperar até que o threadExecutor tenha sido terminado.

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

Resultado:

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

Artigo relacionado - Java Thread