Thread pra controle por horario

2 respostas
wagne23
Estou desenvolvendo uma aplicação em que vou precisar que ela execute de tempos em tempos pre definidos na empresa, então pensei em criar uma thread pra verificar sempre o horario no servidor ,entao eu fiz o seguinte:
import java.text.SimpleDateFormat;
import java.util.Date;

public class Hora extends Thread {
    
    @Override
    public void run() {
        //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
        while (true) {
            if (sdf.format(new Date()).equals("02:55:00")) {
                System.out.println(sdf.format(new Date()));
            }            
        }
    }
}

e

public class Teste {

    public static void main(String args[]){
        Hora h = new Hora();
        h.start();        
    }
}

Mas quando chega a hora determinada ele executa varias vezes. Alguem pode me ajudar?

2 Respostas

T
wagne23:
Estou desenvolvendo uma aplicação em que vou precisar que ela execute de tempos em tempos pre definidos na empresa, então pensei em criar uma thread pra verificar sempre o horario no servidor ,entao eu fiz o seguinte:
import java.text.SimpleDateFormat;
import java.util.Date;

public class Hora extends Thread {
    
    @Override
    public void run() {
        //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
        while (true) {
            if (sdf.format(new Date()).equals("02:55:00")) {
                System.out.println(sdf.format(new Date()));
            }            
        }
    }
}

e

public class Teste {

    public static void main(String args[]){
        Hora h = new Hora();
        h.start();        
    }
}

Mas quando chega a hora determinada ele executa varias vezes. Alguem pode me ajudar?

O loop while está sendo executado várias vezes no mesmo segundo. Para que isso não aconteça você pode colocar um Thread.sleep(1000) para ele rodar apeanas de um em um segundo. Não se esta sua implementação é a melhor maneira de fazer isso, talvez você deva dar uma olhada na API Quartz em [url]http://www.quartz-scheduler.org/[/url].

andreiribas

Dê uma olhada na classe TimerTask.

Ela faz exatamente o que você precisa.

Criado 3 de fevereiro de 2010
Ultima resposta 3 de fev. de 2010
Respostas 2
Participantes 3