2011-10-27 39 views
6

目前我正在使用定時器每間隔時間執行一些功能。但是,稍後當我想要更改執行該功能的時間間隔時,我無法取消上一個時間表。這是如何解決的?謝謝如何取消定時器的現有時間表

+0

你是什麼意思「我不能取消以前的時間表」?你不知道該怎麼做,還是它不適合你的建築? – njzk2

+0

我想取消上一個時間表並以不同的時間間隔開始新的時間表。但是,對於定時器,似乎沒有辦法做到這一點..令人沮喪的 – user301

+0

你必須實際取消定時器並重新創建一個 – njzk2

回答

5

隨着timer.cancel()方法,你可以取消定時器和所有計劃任務。 (見API documentation),或者您可以撥打您的TimerTask timertask.cancel()取消方法(見API documentation

如果要更改計劃的時間,你應該取消的TimerTask並添加新的TimerTask。

+0

TimerTask#取消,然後Timer#purge()不起作用。它仍然運行。 – JohnyTex

3

您可以使用ScheduledThreadPoolExecutor而不是Timer進行調查。

用法非常簡單。您創建一個執行的一個實例:

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); 

然後當你想添加一個任務,您撥打:

executor.scheduleAtFixedRate(myRunnable, delay, interval, unit); 

哪裏myRunnable是你的任務(實現Runnable - 接口),delay是第一次執行任務之前需要多長時間,interval是第一次執行後執行任務之間的時間。 delayinterval基於unit參數進行測量,該參數可以是TimeUnit。*(其中*是SECONDS,MINUTES,MILLISECONDS等)。

然後停止調用執行:

executor.shutdownNow(); 

然後你就可以用不同的間隔重新提交任務。

注意:您可能需要在重新提交任務之前創建執行程序的新實例,但我不太確定原因。

+0

它與定時器有什麼不同? – njzk2

+0

這個鏈接告訴你一些差異:http://www.dremsus.com/index.php/2011/03/why-scheduledthreadpoolexecutor-for-smartfoxserver-2x/另外這個問題在Stackoverflow上分歧:http: //stackoverflow.com/questions/409932/java-timer-vs-executorservice – kaspermoerch

+0

有無論如何,我不需要關閉執行器或關閉計時器?我不想創建執行程序或計時器對象的新實例... – user301

相關問題