Esecuzione di questo codice, mi aspetto che aumenti la variabile di test per 5 secondi e quindi termini.Tempo durante il ciclo non terminato
import java.util.Timer;
import java.util.TimerTask;
public class Test {
private static boolean running;
public static void main(String[] args) {
long time = 5 * 1000; // converts time to milliseconds
long test = Long.MIN_VALUE;
running = true;
// Uses an anonymous class to set the running variable to false
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() { running = false; }
}, time);
while(running) {
test++;
}
timer.cancel();
System.out.println(test);
}
}
Tuttavia quando l'eseguo il programma non termina (presumo, mi hanno dato un ragionevole lasso di tempo). Tuttavia se cambio il ciclo while per
while(running) {
System.out.println();
test++;
}
Il programma termina nella quantità prevista di tempo (e stampa un sacco di linee). Non capisco. Perché questo comportamento si verifica?
Cosa succede se esegui "volatile"? –
Ho appena testato il codice utilizzando JDK 7 con IntelliJ 11 ed entrambe le versioni sono state completate in pochi secondi. Cosa stai usando per correre? –
@AndyTurner wow, non ho mai incontrato prima la parola chiave volatile. Questo fa funzionare il codice. Grazie! – DenverCoder9