Java for-loop Delay?
Hi,
einfache Frage: wie kann ich eine For-Schleife mit jeweils einem delay ausführen?
Beispiel:
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Melon");
for(String fruit : fruits) {
System.out.println(fruit);
// wait 1000ms
}
Hier soll dann jede Sekunde ein String ausgegeben werden.
Ist das möglich? Wenn ja wie?
Vielen Dank.
LG
3 Antworten
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Technik, programmieren
Du könntest Timer.scheduleAtFixedRate benutzen.
Hier als Methode:
public static void delayLoopAsync(ArrayList<?> array) {
final Timer utilTimer = new Timer();
utilTimer.scheduleAtFixedRate(new TimerTask() {
private int index = 0;
public void run() {
//Dein Code hier (falls du etwas anderes machen willst ausser printen)
System.out.println(array.get(index));
index++;
if (index >= array.size()) {
utilTimer.cancel();
}
}
}, 0L, 1000L);
}
Du kannst dann einfach
delayLoopAsync(fruits);
aufrufen.
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Technik, programmieren
Einfach mit Thread.sleep():
for(String fruit : fruits) {
System.out.println(fruit);
try {
Thread.sleep(1000);
}
catch(InterruptedException ex) { /* Error Handling ... */ }
}
Oder mit TimeUnit's Sleep (benutzt im Hintergrund auch Thread.sleep()):
for(String fruit : fruits) {
System.out.println(fruit);
try {
TimeUnit.SECONDS.sleep(1);
}
catch(InterruptedException ex) { /* Error Handling ... */ }
}
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
Schachpapa
16.05.2021, 16:54
@fishgamerYT
Thread.sleep
causes the current thread to suspend execution for a specified period. This is an efficient means of making processor time available to the other threads of an application or other applications that might be running on a computer system.
Das ist genau das, was du willst.
Oder was meinst du mit einem delay, das keine Pause ist?
MrAmazing2
16.05.2021, 17:21
@fishgamerYT
Du kannst das einfach in einem neuen Thread ausführen. Dann läuft dein Main-Thread währenddessen weiter.
new Thread(() -> {
for(String fruit : fruits) {
System.out.println(fruit);
try {
Thread.sleep(1000);
} catch(InterruptedException ex) { /* Error Handling ... */ }
}
}).start();
... aber ist kürzer und verständlicher m.M.n):
weil es keine Checked Exception wirft.
Chic. Wieder was gelernt ;-)
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Technik, programmieren
Danke erstmal für die Antwort.
Das habe ich auch schon versucht, jedoch pausiere ich ja dadurch das Programm, richtig?
Gäbe es vielleicht eine Möglichkeit das im Hintergrund laufen zu lassen?