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???
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
magni
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
magni
publicclassPrincipalextendsThread{@Overridepublicvoidrun(){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....}}publicstaticvoidmain(String[]args){newPrincipal().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
magni
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…
O jeito mais interessante é usar newScheduledThreadPool, não use Sleep.
M
magni
Blz, vo dar uma estudada newScheduledThreadPool e TimeTask…
Depois eu posto o resultado…
M
magni
Uma outra duvida que surgiu a respeito desse tema…
Me mandaram tentar usar o join
publicclassPrincipalextendsThread{@Overridepublicvoidrun(){while(true){this.join(1L);//Maneira que eu estou usando o join}}publicstaticvoidmain(String[]args){newPrincipal().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…