Thread como daemon

Como posso colocar uma thread para rodar como daemon?

Tentei desta maneira e não consegui:


this.thread = Thread.currentThread();
this.thread.setDaemon(true);

Acabei recebendo uma “java.lang.IllegalThreadStateException”.
Esta thread que quero criar como daemon é uma sub-thread. E minha aplicação roda no Tomcat.

Cara, você recebeu um IllegalThreadStateException porque você tentou transformar uma thread que já está rodando em um daemon. Experimente chamar o método setDaemon antes de chamar o método start.

Se lembre o método Thread.currentThread() pega uma thread que já está rodando.

Thread com web?! 8O

Tu realmente não quer fazer isso dentro de um containder JEE, não é?

Você não tem controle nenhum de threads dentro de uma aplicação JEE. Rodando uma thread neste contexto, você está indo contra o bom senso, sendo que para a especificação JEE o uso de threads é proibida!

Pense bem se isso realmente é necessário, ok?

Abraços

[quote=eltonk]Você não tem controle nenhum de threads dentro de uma aplicação JEE. Rodando uma thread neste contexto, você está indo contra o bom senso, sendo que para a especificação JEE o uso de threads é proibida!
[/quote]

Poderia tirar uma dúvida?
Como você atenderia o seguinte requisito sem utilizar threads paralelas: A simulação deve ser executada no máximo em 1min?

Ex:

Um módulo de simulação de financiamento, onde posso configurar até 5 situações de financiamento e no final vizualizar os resultados de todas as situações na mesma tela, com intuito de perceber qual financiamento será mais vantajoso no final, por exemplo:

[list]50% de entrada, 2 balões de 15% do valor e 35% financiado em 60x[/list]
[list]30% de entrada, 5 balões de 10% do valor e 20% financiado em 12x[/list]
[list]…[/list]

Consirede essa solução: EJB - Session Bean (Stateless)

// Esse código deve rodar no server. for (Financiamento f : financiamentoList) { resultado.add(f.simular()); }

Digamos que para cada f.simular() o tempo de execução da simulação seja de 1min (aproximadamente), se na minha lista de simulações tiver 5 situações, o tempo total desta simulação seria de 5min, certo?
Detalhe, o f.simular() é síncono, ou seja, eu dependo do retorno do resultado da execução.

Neste caso você usaria threads :idea:

Eltonk, thread só é proibido dentro do request. Nada impede que o desenvelvedor crie um thread dentro de um listener.

Eu criei estas threads porque precisava fazer o máximo de requisições sockets para uma outra máquina, por exemplo eu tenho que fazer 200 conexões sockets ao mesmo tempo.
Como poderia fazer isso sem thread?
E como setar a thread antes de ela rodar se eu estou implementando Runnable?

Se as threads executam todas no mesmo processador, não vejo nenhuma vantagem em usar as threads. O tempo de execução não vai diminuir já que elas vão partilhar o processador.

Elton, como o Evandro disse, não é aconselhável criar threads apenas em requests. E mesmo no request é possível e as vezes necessário.

pmlm, dê uma lida melhor no conceito de threads. Threads melhoram, e muito, o tempo de execução mesmo em um único processador.