[英]Java ScheduledExecutorService standard practice
我在J2EE應用程序中使用ScheduledExecutorService來安排每隔x秒從配置文件中提取任務的任務(從數據庫中提取數據並將其發送到外部服務器)。 我的代碼是:
try{
final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(new Runnable(){
public void run(){
RsaBaseAction rsa = RsaBaseAction.getInstance();//class that does all the work
rsa.rsaBaseAction();
}
}, 0, timeInterval, TimeUnit.SECONDS);
}
catch(Exception ex){
ex.printStackTrace();
}
我的問題是,我應該編寫任何其他代碼嗎? 我是否應該編寫while循環以確保線程完成,然后執行service.shutdown()
或ScheduledExecutorService
替我完成此工作?
如果希望調度程序停止調度事件,則可以調用shutdown
。 您不需要顯式執行此操作,就好像您希望它在應用程序的整個生命周期中運行一樣。 如果出於某種原因調度不再有意義,則可以使用shutdown
方法。
一個例子。 您正在編寫一個CMS,該產品可與Google Shopping集成以上傳產品信息。 如果用戶刪除了他們的上載信息(即,將其關閉),則可以調用shutdown以停止服務進行同步。
正如關於shutdown
方法的Javadoc明確指出的那樣:
啟動有序關閉,在該關閉中執行先前提交的任務,但不接受任何新任務。 如果已關閉,則調用不會產生任何其他影響。 此方法不等待先前提交的任務完成執行。 使用awaitTermination可以做到這一點。
即先前的任務將要完成,沒有新的任務將要完成,但是如果需要一些時間,先前的任務可能會繼續通過shutdown
命令。
至於您擁有的代碼-我看不到try-catch塊的任何原因。 計划任務不會引發任何異常。 似乎您想實際嘗試捕獲rsaBaseAction
而不是調度(如果可運行程序拋出異常,則不再調度執行,並且該異常由線程組異常處理程序處理)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.