您可以使用ScheduledExecutorService
安排Runnable
或Callable
。調度程序可以使用例如固定延遲,如下面的例子:
// 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);
}
}
我不會推薦後一種方法,因爲它會阻止你的線程,但如果你只有一個線程....
海事組織,與調度程序的第一個選項是要走的路。