Wenn ich diesen Code ausführe, würde ich erwarten, dass er die Testvariable für 5 Sekunden erhöht und dann beendet.Zeitgesteuerte While-Schleife, die nicht beendet wird
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);
}
}
Jedoch, wenn ich es das Programm läuft nicht am Ende (ich nehme an, ich habe es eine angemessene Menge an Zeit gegeben). Allerdings, wenn ich die while-Schleife zu
while(running) {
System.out.println();
test++;
}
Das Programm endet in der erwarteten Höhe der Zeit (und druckt viele Linien) ändern. Ich verstehe nicht. Warum tritt dieses Verhalten auf?
Was passiert, wenn Sie "volatile" ausführen? –
Ich habe gerade Ihren Code mit JDK 7 mit IntelliJ 11 getestet und beide Versionen sind in wenigen Sekunden fertig. Was benutzt du um zu laufen? –
@AndyTurner wow, ich bin noch nie auf das flüchtige Keyword gestoßen. Das macht den Code funktioniert. Vielen Dank! – DenverCoder9