2014-07-24 92 views
4

我有一個線程,我想在每15分鐘後運行一次。目前我打電話給這個線程從另一個類似如何在特定時間後繼續運行線程

Class B{ 
public void start(){ 
while(true){ 
new Thread(new A()).start(); 
    } 
} 
} 

Class A implements Runnable{ 
    @override 
    public void run(){ 
    //some operation 
    } 
} 

我怎樣才能每15分鐘調用線程A.

+0

爲什麼不'睡眠()'15分鐘? – TheLostMind

+0

我不知道如何使用 – Ashish

+0

你不能_call_一個線程。你可以通過創建一個新的Thread對象t來創建一個線程,然後調用t.start()。不過,您不能重新使用Thread對象:您可以只調用一次start(),然後如果您想再次執行相同的操作,則必須再次創建一個新的Thread對象。 –

回答

4

您可以使用TimerScheduledExecutorService的間隔重複的任務。

ExecutorService這個ExecutorService可以安排命令在給定的延遲後運行或定期執行。

示例代碼:

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); 

executorService.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
     System.out.println("Asynchronous task"); 
    } 
}, 0, 15, TimeUnit.MINUTES); 

查找more examples...

+0

謝謝我認爲我喜歡它 – Ashish

2

使用睡眠是這樣的:

public void run(){ 
    while(true){ 
    // some code 
    try{ 
     Thread.sleep(15*60*1000) // sleep for 15 minutes 
     } 
    catch(InterruptedException e) 
    { 
    } 
    } 
    } 
+0

大聲笑..有類似的答案;) –

+0

@OrelEraki - :P – TheLostMind

+0

非常感謝。 – Ashish

0

啓動時它不能再次啓動。

您可以將Thread.Sleep(15*60*1000)放在run函數中,以使其睡眠並將其與周圍環繞,以便再次循環。

3

看看TimerTimerTask

一個線程的工具,用於在後臺線程中安排將來執行的任務。可以安排一次性執行任務,或定期重複執行任務。

2

替代選項使用類java.util.Timer

Timer time = new Timer(); 
ScheduledTask st = new ScheduledTask(); 
time.schedule(st, 0, 15000); 

public void scheduleAtFixedRate(TimerTask task,long delay,long period); 

甚至

java.util.concurrent.ScheduledExecutorService的方法

schedule(Runnable command, long delay, TimeUnit unit) 
0

我認爲Timer會做雅。

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

    class A extends TimerTask { 
    @Override 
    public void run(){ 
     //some operation 
    } 
    } 

    A task = new A(); 
    final long MINUTES = 1000 * 60; 
    Timer timer = new Timer(true); 
    timer.schedule(task, 15 * MINUTES, 15 * MINUTES);