Porque o código abaixo retorna "Thread-1 Thread-3" e não retorna "Thread-1 Thread-2 "?

3 respostas
F

Porque o código abaixo retorna “Thread-1 Thread-3” e não retorna "Thread-1 Thread-2 "?
Existe uma explicação lógica para isso?

public class Given3 extends Thread {
	public static void main(String[] args) {
		Thread t = new Thread(new Given3());
		Thread t2 = new Thread(new Given3());
		t.start();
		t2.start();
	}

	@Override
	public void run() {
		System.out.print(Thread.currentThread().getName() + " ");
	}
}

3 Respostas

rmendes08

Porque na prática você está instanciando 4 threads. O construtor default da Thread atribui a cada uma os nomes Thread-n, na ordem em que são criadas, começando com n=0 veja:

Given3 t0 = new Given3();
Thread t1 = new Thread(t0);
Given3 t2 = new Given3();
Thread t3 = new Thread(t2);
t1.start();
t3.start();
F

Só hj vim entender melhor isso!

Thread t = new Thread(new Given3()); instancia Thread-1 e depois Given3 que tb é uma Thread,
só aqui já existe os nomes Thread-1 e Thread2, o mesmo caso com a linha de baixo!

Obrigado!

rmendes08

Sim. E já deixo a dica: ao invés de estender de Thread, faça com que a classe que vai executar na thread implemente Runnable. Ou no caso do Java 8, você pode passar um lambda diretamente para o construtor de Thread.

Criado 8 de julho de 2016
Ultima resposta 14 de jul. de 2016
Respostas 3
Participantes 2