2017-10-13 14 views
1

forループを作成するには、ループをリフレッシュするのにかかる時間を制御したいと思います。タイマーでこれを行うことができました。
私の唯一の問題は、タイマーがforループのように動作し続けることです。繰り返しと繰り返しと繰り返しです。つまり、forループが繰り返されないようにします。ループコードの
私はここにある:タイマを使ってforループを遅くする方法

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 
    ); 
} 

答えて

2

私はあなたがこのような何かを探していると思います:

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(); 
    } 
} 

それは素敵な、シンプルなソリューションですが、スレッドがスリープして行っていませんほとんどの時間に役立つもの。それは大抵の場合は問題ありませんが、より効率的な解決方法は、試したタイマーのようなもので、より現代的なものだけを使用することです。ScheduledExecutorServiceここで

はそれがうまくいくかもしれないかのラフスケッチです:

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

内部の使用このコードを、私は 'のThread.sleep()' –

+0

'scheduleAtFixedRate'について考えていませんでした確かに行く方法です! – alfasin

0

あなたfor-loop

try { 
    Thread.sleep(5000); 
} catch(InterruptedException ex) { 
    ex.printStackTrace(); 
} 
関連する問題