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.
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!
[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.
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.