2010-08-22 26 views

Respuesta

70

En Java 5+ con un ScheduledExecutorService:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); 
exec.scheduleAtFixedRate(new Runnable() { 
    @Override 
    public void run() { 
    // do stuff 
    } 
}, 0, 5, TimeUnit.SECONDS); 

se favorece el método anterior. Antes de Java 5 que utilizó Timer y TimerTask:

timer.scheduleAtFixedRate(new TimerTask() { 
    @Override 
    public void run() { 
    // do staff 
    } 
}, 0, 5000); 
+5

lo que si cierro la ventana principal de la aplicación? ¿Esta tarea aún se ejecutará? – Tomasz

8

Al usar un ScheduledExecutorService.

Echa un vistazo a Executors.newScheduledThreadPool. Le permitirá crear un ScheduledExecutorService que le permite enviar Runnable s para que se ejecute a intervalos regulares.

3
while (true) { 
    thread.sleep(1000) 
    method(); 
} 

En muchos casos habrá mejores alternativas. Pero esta es la forma más fácil de implementar una ejecución regular de su método() en un intervalo de 1000ms + n (donde n es la cantidad de tiempo empleado en ejecutar el método())

Por supuesto que en lugar de 1000, puede poner cualquier valor en milisegundos que desee. También podría ser una idea implementar el ciclo while en un indicador que controle otro hilo; de modo que hay una manera de detener la ejecución del ciclo sin tener que matar el programa.

+2

casi - será al menos 1000. Depende de cuándo el planificador de hilos decide comenzar a ejecutar el hilo de nuevo. Será 1000 + a + n (donde a es el tiempo que le lleva al programador activar nuevamente el hilo) – RNJ

1

Uso continuación Código:

Timer timer = new Timer(); 
timer.schedule(new TimerTask() 
{ 
    public void run() { 
    // do your work 
    } 
}, 0, 60*(1000*1)); 
Cuestiones relacionadas