2015-01-26 48 views

回答

2

您可以使用ScheduledExecutorService安排RunnableCallable。調度程序可以使用例如固定延遲,如下面的例子:

// Create a scheduler (1 thread in this example) 
final ScheduledExecutorService scheduledExecutorService = 
     Executors.newSingleThreadScheduledExecutor(); 

// Setup the parameters for your method 
final String url = ...; 
final String word = ...; 

// Schedule the whole thing. Provide a Runnable and an interval 
scheduledExecutorService.scheduleAtFixedRate(
     new Runnable() { 
      @Override 
      public void run() { 

       // Invoke your method 
       PublicPage(url, word); 
      } 
     }, 
     0, // How long before the first invocation 
     10, // How long between invocations 
     TimeUnit.MINUTES); // Time unit 

的Javadoc描述了函數scheduleAtFixedRate這樣的:

與創建並執行一個給定的初始延遲之後第一啓用的定期操作,並且隨後特定時期;即執行將在initialDelay之後開始,然後是initialDelay +週期,然後是initialDelay + 2 *週期,依此類推。

你可以找到更多關於ScheduledExecutorService in the JavaDocs

但是,如果你真的要保持整個事情單線程的,你需要把你的線程線沿線的睡眠:

while (true) { 
    // Invoke your method 
    ProcessPage(url, word); 

    // Sleep (if you want to stay in the same thread) 
    try { 
     Thread.sleep(1000*60*10); 
    } catch (InterruptedException e) { 
     // Handle exception somehow 
     throw new IllegalStateException("Interrupted", e); 
    } 
} 

我不會推薦後一種方法,因爲它會阻止你的線程,但如果你只有一個線程....

海事組織,與調度程序的第一個選項是要走的路。

0

會適合你嗎?

Timer timer = new Timer(); 
timer.schedule((new TimerTask() { 
    public void run() { 
     ProcessPage(url, word); 
    }     
}), 0, 600000); //10 minutes = 600.000ms 

在這裏看到的Javadoc:http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html#schedule(java.util.TimerTask,%20long,%20long)

時刻表重複的固定延遲執行指定的任務,在指定的延遲後開始。隨後的執行大約按規定的時間間隔進行,並與指定的時間段分開。

相關問題