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
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
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.
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
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 ... */ }
}
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
![](https://images.gutefrage.net/media/user/Schachpapa/1456653634658_nmmslarge__116_32_432_432_d36a6a6d62721271685e85017f4dbcb0.jpg?v=1456653637000)
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
![](https://images.gutefrage.net/media/user/fishgamerYT/1568734889275_nmmslarge__0_0_400_400_a7448469a17c2ce8ed07251058ff274b.png?v=1568734889000)
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?
![](https://images.gutefrage.net/media/user/Schachpapa/1456653634658_nmmslarge__116_32_432_432_d36a6a6d62721271685e85017f4dbcb0.jpg?v=1456653637000)
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?
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
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();
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
weil es keine Checked Exception wirft.
Chic. Wieder was gelernt ;-)