2017-10-13 12 views
1

Wenn ich eine for-Schleife mache, würde ich gerne kontrollieren, wie lange es braucht, um die Schleife zu aktualisieren, und ich dachte, ich könnte das mit einem Timer machen.
Mein einziges Problem ist der Timer läuft wie eine for-Schleife - wiederholen und wiederholen und wiederholen - so hält es nur die for-Schleife zu wiederholen, was ist nicht was ich will.
My für die Code-Schleife ist hier:Wie benutze ich einen Timer um eine For-Schleife zu verlangsamen?

for(int i=0; i < 200; i += 4){ 
    System.out.println("Hopefully will only run once...per 5 secs"); 
    new java.util.Timer().schedule( 
     new java.util.TimerTask() { 
      @Override 
      public void run() { 

      } 
     }, 
     5000 // 5 sec buffer, but never stops buffering 
    ); 
} 

Antwort

2

Ich denke, dass man für so etwas wie das gesuchte:

for(int i=0; i < 200; i += 4){ 
    System.out.println("Hopefully will only run once...per 5 secs"); 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

Es ist eine nette, einfache Lösung, aber der Thread schläft und nicht tut, alles, was die meiste Zeit nützlich ist. In den meisten Fällen ist das in Ordnung, aber eine effizientere Lösung wäre die Verwendung eines ScheduledExecutorService, der wie der Timer ist, den Sie ausprobiert haben, nur moderner.

Hier ist eine grobe Skizze, wie das funktionieren könnte:

ScheduledExecutorService exec = Executors.newScheduledThreadPool(1); 

AtomicInteger i = new AtomicInteger(0); 
exec.scheduleAtFixedRate(() -> { 
    int j = i.getAndAdd(4); 
    if (j >= 200) { 
     exec.shutdownNow(); 
     return; 
    } 

    System.out.println(j); //Will print 0,4,8 etc.. Once every 5 seconds 
    //Do stuff 
}, 0, 5, TimeUnit.SECONDS); 
+0

ich nicht über 'Thread.Sleep dachte()' ' –

+0

scheduleAtFixedRate' ist in der Tat der Weg zu gehen! – alfasin

0

Verwenden Sie diesen Code in Ihrem for-loop

try { 
    Thread.sleep(5000); 
} catch(InterruptedException ex) { 
    ex.printStackTrace(); 
} 
Verwandte Themen