2010-08-22 27 views

risposta

70

In Java 5+ con un ScheduledExecutorService:

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

Il metodo di cui sopra è favorita. Prima di Java 5 è stato utilizzato Timer e TimerTask:

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

cosa succede se chiudo la finestra principale dell'applicazione? questo compito sarà ancora in esecuzione? – Tomasz

8

Utilizzando un ScheduledExecutorService.

Dai un'occhiata allo Executors.newScheduledThreadPool. Ti permetterà di creare un ScheduledExecutorService che ti permette di inviare Runnable s da eseguire ad intervalli regolari.

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

In molti casi ci saranno alternative migliori. Ma questo è il modo più semplice per implementare un'esecuzione regolare del metodo() ad un intervallo di 1000 ms + n (dove n è la quantità di tempo impiegato metodo di esecuzione())

Ovviamente invece di 1000, è possibile mettere qualsiasi valore millisecondo desiderato. Potrebbe anche essere un'idea per implementare il ciclo while su un flag controllato da un altro thread; in modo che ci sia un modo per fermare l'esecuzione del ciclo senza dover uccidere il programma.

+2

quasi - sarà almeno 1000. Dipende quando il programma di pianificazione dei thread decide di riavviare il thread. Sarà 1000 + a + n (dove a è il tempo impiegato dallo scheduler per riattivare il thread) – RNJ

1

Uso sottostante Codice:

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