Matando uma thread ciclica

4 respostas
S

Como eu faço para matar uma thread que fica agarrada a algum recurso da maquina???

Por exemplo, fica presa ao banco de dados…

O state dela continua RUNNABLE, interrupet não funciona, não tentei com metodos Deprecated, ja que eles tem problemas…

eu consigo saber se a thread ficou agarrada a um recurso, so nao cosigo para seu funcionamento.

4 Respostas

S

Cara não sei se ninguem respondeu porque não entenderam ou se não tem jeito mesmo…

Como uma linguagem tão poderosa como JAVA não te um metodo para dar kill na thread independente do State da thread (RUNNABLE ou BLOCK)…

Vou dar um exemplo simples…

Por exemplo, se minha query está tentando atualizar um campo para de um tabela no banco de dados, e alguem estiver atualizando aquele mesmo camp, a minha thread ficará parada ali, até que seja dado um commit para esta transação…

vlw!!!

S

“Suelmar”:
Cara não sei se ninguem respondeu porque não entenderam ou se não tem jeito mesmo…

Como uma linguagem tão poderosa como JAVA não te um metodo para dar kill na thread independente do State da thread (RUNNABLE ou BLOCK)…

Vou dar um exemplo simples…

Por exemplo, se minha query está tentando atualizar um campo para de um tabela no banco de dados, e alguem estiver atualizando aquele mesmo camp, a minha thread ficará parada ali, até que seja dado um commit para esta transação…

interrupt é a forma de matar a thread. O seu problema não está na thread e sim na transação. A transação é amarrada a uma thread. Não pode matar a thread sem terminar a transação primeiro.
Concerteza é um problema da sua implementação e não da thread.

V

Sei que faz tempo que foi postado o tópico, mas vi agora que tava procurando por uma solução para o mesmo problema.
Tenho uma thread que fica escutando um banco de dados e solucionei da seguinte forma

public boolean executando;

public void run() {
        executando = true;
        while(executando){
            try
            {
                // ler banco
                System.out.println("THREAD");
                Thread.sleep(2000);
            }
            catch(InterruptedException e)
            {
                executando = false;
            }
        }
    }

Então quando executa o threadExecutor.shutdown(); gera uma exceção e torna o boolean falso e não executa mais o while.
So recomendo fazer isso se vc tem certeza que tua thread não faz nenhuma operação muito crítica

_Zell_

Legal sua solução vinaPJ. Era bem disso que eu estava precisando o/

Criado 28 de junho de 2007
Ultima resposta 30 de ago. de 2010
Respostas 4
Participantes 4