簡體   English   中英

Java ScheduledExecutorService標准實踐

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM