2013-07-01 15 views
4

是否有會做的任務,而無需使用睡眠功能如何在java中定期執行一個動作?

對於例如每3秒創建一個循環的任何方式:

try { 
    while (true) { 
     System.out.println(new Date()); 
     Thread.sleep(5 * 1000); 
    } 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 

但問題在使用睡眠功能是,它只是凍結該程序。

該循環的主要思想是與mysql數據庫 (在線)同步。

回答

6

使用java.util.TimerTask

java.util.Timer t = new java.util.Timer(); 
t.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       System.out.println("This will run every 5 seconds"); 

      } 
     }, 5000, 5000); 

如果您使用的是圖形用戶界面,你可以使用javax.swing.Timer,例如:

int delay = 5000; //milliseconds 
    ActionListener taskPerformer = new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      System.out.println("This will run every 5 seconds"); 
     } 
    }; 
    new javax.swing.Timer(delay, taskPerformer).start(); 

一些有關java.util.Timer和之間的區別的信息: http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html

該類和javax.swing.Timer的基本功能相同,但 java.util.Timer更常用,功能更多。 javax.swing.Timer具有兩個功能,可以使其更容易與 一起使用。首先,它的事件處理隱喻是GUI 程序員熟悉的,並且可以使處理事件分派線程更簡單一點。其次,它的自動線程共享意味着你不要 必須採取特殊步驟來避免產生太多的線程。 相反,您的計時器使用與使光標閃爍, 工具提示出現等相同的線程。

+1

*「這將運行每隔3秒」 * - 不,它不會),這還假定用戶沒有使用某種GUI框架的 – MadProgrammer

+0

sysout修正:) @MadProgrammer爲什麼你說它假定用戶沒有使用任何GUI框架?這就是爲什麼我不建議使用'javax.swing.Timer'? – fmodos

+1

這個問題沒有背景。如果OP使用Swing(例如),那麼可能不是一個好主意。對於上下文,它仍然是一個有效的答案,但我會(親自)聲明這是假設OP不使用GUI - IMHO – MadProgrammer

4

您可以使用的一個執行ScheduledExecutorService如果你確定要移動你想要重複執行的邏輯我沒有線程。

這裏是例如從鏈接:

import static java.util.concurrent.TimeUnit.*; 
class BeeperControl { 
    private final ScheduledExecutorService scheduler = 
     Executors.newScheduledThreadPool(1); 

    public void beepForAnHour() { 
     final Runnable beeper = new Runnable() { 
       public void run() { System.out.println("beep"); } 
      }; 
     final ScheduledFuture<?> beeperHandle = 
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); 
     scheduler.schedule(new Runnable() { 
       public void run() { beeperHandle.cancel(true); } 
      }, 60 * 60, SECONDS); 
    } 
} 
+0

+1像執行人的服務理念 – MadProgrammer

相關問題