Java for-loop Delay?

3 Antworten

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

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
fishgamerYT 
Fragesteller
 16.05.2021, 16:48

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?

0
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?

1
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();
0