Obter Thread Id em Java
-
Obter o id do thread utilizando
Thread.getId()
em Java -
Obter o id do grupo de discussão actual utilizando
Thread.currentThread().getId()
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn