Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Usando Executor para thread pool, como fornecer um nome para identificar a Thread?

Instanciando uma Thread com new Thread() é possível identificá-la fornecendo um nome. Porém, se eu utilizar uma Thread Pool, como eu faço para identificar a thread ou grupo de threads com um nome?

// Com Thread Pool:

poolThreads = Executors.newFixedThreadPool(20);

ProtocoloModem protocoloModem = new ProtocoloModem(socket);

poolThreads.execute(protocoloModem);

// Com new Thread()

new Thread(new ProtocoloModem(socket), "ProtocoloModem").start(); // ProtocoloModem é o nome da Thread.

3 respostas

Oi Tiago, acho que faltou um conhecimento para mim aqui.. não entendi o que vc ta querendo fazer.. pode tentar explicar de outro jeito?

Oi, Alberto! Eu esqueci de mencionar os detalhes, sorry!

Abaixo, uma amostra com código para esclarecer:

poolModems = Executors.newFixedThreadPool(20);

// ...  codigo omitido

// Neste caso, com thread Pool, como fornecer um nome para o grupo de threads???

ProtocoloModem protocoloModem = new ProtocoloModem(socket);
poolModems.execute(protocoloModem); 

// OU equivalente, sem pool de Threads, porém, consigo fornecer um nome para elas.

new Thread(new ProtocoloModem(socket), "ProtocoloModem").start();   // Nome da Thread é "ProtocoloModem"
solução!

Você vai precisar dar uma olhada na interface ThreadFactory, a implementação dela é usada por default pelo criador do pool e é de lá que sai o nome das threads do pool. Tanto que tem um método no Executors, que recebe uma ThreadFactory como argumento...

Você pode implementar o seu, ou baixar um guava da vida que já vai ter um builder de ThreadFactory customizada para vc.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software