Problemas com thread [RESOLVIDO]

12 respostas
M

Bom dia

Estou com o seguinte problema…

Eu tenho um sistema em que fica executando uma thread que faz umas verificações o tempo todo, dentro de um laço de repetição while…
Só que isso ta causando um problema, pois está thread está consumindo uns 30% do processador…

Eu queria saber se tem algum outro meio de fazer isso, sem que consuma tanto processamento???

Falow

12 Respostas

Guitar_Men

Esse consumo de CPU é o tempo todo ou só durante o tempo em que o processamento esta sendo feito?
Uma boa prática é botar um sleep (nem que seja de 1 ms) para não fritar o processador.

M

Quando a thread está executando fica puxando entre 20 e 30%… direto

Guitar_Men

É difícil dar uma resposta sem pelo menos dar uma olhada no código. Tem como você postar o código pra nós ?

M
public class Principal extends Thread {

    @Override
    public void run() {
        while (true) {
                //Aqui eu faço umas verificações de data e hora,,,,,
               //Verifica uma data e hora e executa uma ação no momento que eu quero....
         
        }
    }
    public static void main(String[] args) {
        new Principal().start();
    }
}

O fato é que só o while ja come de 20 a 30% de processamento.

Guitar_Men

Coloca um sleep de 1 no final do while e monitora novamente

M

Agora que vem o meu problema…

Se eu coloco o sleep, e por algum milagre o usuário muda a hora do pc, no momento em que a thread está execultando… ai o sleep para de funcionar…

Guitar_Men

Mas é 1 milisegundo. Acho difícil ter um impacto tão grande assim. Talvez você tenha que rever sua implementação

darklordkamui

Já tentou usar TimeTask? ele funcionaria bem para o que vc quer fazer pelo que percebi…

Guia TimeTask

Laubstein_M_cio

O jeito mais interessante é usar newScheduledThreadPool, não use Sleep.

M

Blz, vo dar uma estudada newScheduledThreadPool e TimeTask…

Depois eu posto o resultado…

M

Uma outra duvida que surgiu a respeito desse tema…

Me mandaram tentar usar o join

public class Principal extends Thread {

    @Override
    public void run() {
        while (true) {
             this.join(1L); //Maneira que eu estou usando o join
         
        }
    }
    public static void main(String[] args) {
        new Principal().start();
    }
}

Alguém sabe me dizer exatamente como o join funciona???
Que aparentemente funcionou, mas eu não consegui entender como é o exato funcionamento do join…

Falow

darklordkamui

a função do join é esperar a thread morrer…
o jeito que vc está fazendo é esperar ela morrer em 1 milliseconds não sei se é isso bem o que vc ta querendo que aconteça…

Criado 11 de janeiro de 2012
Ultima resposta 12 de jan. de 2012
Respostas 12
Participantes 4