2013-12-19 46 views
0

我如何讓這個方法在遞歸函數中每隔幾秒鐘運行一次。 我希望i變量每隔幾秒更新一次,而不是將它打印到控制檯。 在JavaScript中我可以使用setTimeout是否有像Java中的JavaScript setTimeout方法?如何使用計時器在Java中運行方法?

final i = 0; 
public void timerActions() { 
    i = i + 1; 
    System.out.println(i); 
} 
+0

您可以用'的Thread.sleep (1000);'如果這只是爲了好玩。 – Baby

回答

1

與定時嘗試

Timer timer = new Timer("Display Timer"); 

     TimerTask task = new TimerTask() { 
      @Override 
      public void run() { 
       timerActions(); 
      } 
     }; 
     // This will invoke the timer every second 
     timer.scheduleAtFixedRate(task, 1000, 1000); 
    } 
1

您應該使用ScheduledExecutorService

更新每彼得Lawrey評論(感謝):

方法:

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, 
               long initialDelay, 
               long period, 
               TimeUnit unit); 

public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, 
               long initialDelay, 
               long delay, 
               TimeUnit unit); 

可以爲了達到你期望的行爲中。

+0

+1和'scheduleAtFixedRate(runnable,2,TimeUnit.SECONDS);' –

+0

計劃只做一次。 –

+0

@PeterLawrey謝謝。 – Ioan

0

如果它只是一個簡單的應用程序,只需「運行速度較慢」,那麼您可以在執行後讓Thread進入睡眠狀態。

例如:

final i = 0; 
public void timerActions() { 
    i++; 
    System.out.println(i); 
    Thread.sleep(1000); 
} 

1000括號裝置1000毫秒=1秒 - 的時間,其中所述線程休眠的量。 這是一個簡單的方法,但請注意,在較大的多線程應用程序中,您必須考慮線程安全和相關問題。

的文檔Thread.sleep()

0
public class TimedAction 
{ 
    public static void main(String[] args) throws Exception 
    { 
     System.out.println("begin"); 

     ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); 

     Runnable command = new Runnable() 
     { 
      private int i = 0; 

      @Override 
      public void run() 
      { 
       // put your logic HERE 
       System.out.println(i++); 
      } 
     }; 

     // execute command, immediately (0 delay), and every 2 seconds 
     executor.scheduleAtFixedRate(command, 0, 2, TimeUnit.SECONDS); 

     System.in.read(); 

     executor.shutdownNow(); 
     executor.awaitTermination(5, TimeUnit.SECONDS); 

     System.out.println("end"); 
    } 
} 
0

這將打印 「計數......」 每2秒對

import java.util.Timer; 
import java.util.TimerTask; 

public class MyTimerTask extends TimerTask { 

private int counter = 0; 

public void run() { 
    counter++; 
    if (counter <= 3) { 
     System.out.println("Counting - counter = " + counter); 
    } else { 
     System.out.println("Stopping timer execution"); 
     this.cancel(); 
    } 
} 


public static void main(String[] args) { 

    Timer timer = new Timer("TimerThreadName"); 
    MyTimerTask task = new MyTimerTask(); 

    // void java.util.Timer.schedule(TimerTask task, long delay, long period) 
    timer.schedule(task, 0, 2000); 

    } 
}