2010-08-22 5 views

Répondre

70

En Java 5+ avec un ScheduledExecutorService:

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

La méthode ci-dessus est favorisée. Avant Java 5 vous avez utilisé Timer et TimerTask:

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

si je ferme la fenêtre principale de l'application? cette tâche sera-t-elle toujours en cours? – Tomasz

8

En utilisant un ScheduledExecutorService.

Jetez un oeil à Executors.newScheduledThreadPool. Il vous permettra de créer un ScheduledExecutorService qui vous permet de soumettre Runnable s à exécuter à intervalles réguliers.

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

Dans de nombreux cas, il y aura de meilleures alternatives. Mais c'est le moyen le plus simple d'implémenter une exécution régulière de votre méthode() à un intervalle de 1000ms + n (où n est le temps passé à exécuter method())

Bien sûr, au lieu de 1000, vous pouvez mettre toute valeur en millisecondes que vous désirez. Il pourrait aussi être une idée d'implémenter la boucle while sur un drapeau contrôlé par un autre thread; de sorte qu'il existe un moyen d'arrêter l'exécution de la boucle sans avoir à tuer le programme.

+2

presque - ce sera au moins 1000. Cela dépend quand le planificateur de thread décide de recommencer à exécuter le thread. Ce sera 1000 + a + n (où a est le temps qu'il faut au planificateur pour activer à nouveau le thread) – RNJ

1

utilisation ci-dessous le code:

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