簡體   English   中英

在另一個Task Java中安排任務

[英]Scheduling Tasks in another Task Java

我開發了一個程序,該程序每兩分鍾調用一次db以檢查新任務

public static void main(String[] args) {
ScheduledExecutorService scheduler =     Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleWithFixedDelay(new ESMSCampaignTask(), 0, 2, TimeUnit.MINUTES);
}

現在下面的代碼從數據庫檢查並執行線程

public void run() {

    ExecutorService execService = Executors.newFixedThreadPool(5);

    List<ScheduledCampaigns> scheduledCampaignsList =   campaignsService.getScheduledCampaigns();

    for (ScheduledCampaigns campaign : scheduledCampaignsList) {

        String cmpName = "SCH_CAMPAIGNS_" + campaign.getCampaign_id();

        execService.execute(new Runnable() {
            public void run() {
                smppService.submitShortMessage(campaign);
            }
        });

    }//EO For Loop

}//EO Run

我正在尋找的解決方案是如何獲取上述線程的完成狀態,以便相應地更新數據庫?

我試圖execService.awaitTermination(500,TimeUnit.SECONDS);

但是,在現有線程完成其任務之前,我將無法啟動新線程。

因此,解決方案應提供這樣的功能,即每隔兩分鍾我就可以啟動新線程,而無需等待現有線程完成,同時我不斷獲取線程完成狀態,因此可以相應地更新數據庫。

問候,

如果使用ExcecutorService.submit()而不是execute ,則可以獲取Future對象。 將其存儲在向量中,然后可以遍歷此向量中的項目以檢查其完成狀態。

/**  keep track of currently running tasks */
Vector runningTasks<Future> = new Vector<Future>();

public void run(){
  for (ScheduledCampaigns campaign : scheduledCampaignsList) {

    String cmpName = "SCH_CAMPAIGNS_" + campaign.getCampaign_id();

    Future f = execService.submit(new Runnable() {
        public void run() {
            smppService.submitShortMessage(campaign);
        }
    });
    runningTasks.add(f);

  }//EO For Loop

  // which tasks have just completed?
  Vector<Future> justCompletedTasks = new Vector<Future>();

  // check currently executing tasks
  for (Future task : runningTasks){
   if( task.isDone() || tasks.isCancelled() ){
      justCompletedTasks.add(task);
   }
  } // EO check executing tasks

  // remove completed tasks from current list
  runningTasks.removeAll(justCompletedTasks);
} // EO run

抱歉,這是未經測試的,但是希望這個想法有用嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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