2011-02-28 53 views
1

我正在尋找開源線程池lib,我可以使用它來安排這些工作,一旦完成了單個工作,我想在線程中發出一些通知,以便我可以完成剩下的任務。你們是否知道任何開源類庫正在做類似的工作。我可能會在多個diff服務器中使用這個庫。開源線程池lib

我的任務基本概述是我有物品清單。每個項目都需要提交給其他系統的JMS/Webservice,然後等待每個正在處理的項目的響應,然後執行其餘的任務。

在此先感謝

回答

3

如何j.u.c. ThreadPoolExecutor?妥善包裝,並加上明智地使用Future它應該符合你所述的規格。如果您有特定的「阻止此線程,直到下列任務集完成」行爲,那麼您也可以使用CompletionService

正如另一位回答者指出的那樣,如果您真的需要一個完全充實的任務計劃服務,您還可以跳轉到使用Quartz Scheduler。這聽起來像是對你的問題有點矯枉過正,但你沒有提供具體細節。如果這是你採取的路徑,那麼在SO處有一個lot of good Q+A on Quartz Scheduler

+0

我的回答指向TPE,因爲從您的問題中不清楚您是否真的需要一個強大的任務調度設備 - 我聽起來像你有一些Web服務從最初的任務中分離出獨立的任務,然後想等待他們完成。如果您確實需要安排*任務,QuartzScheduler(請參閱@ harschware的答案)是正確的解決方案。 – andersoj 2011-03-01 13:27:48

+0

謝謝andersoj,在做了一些初步的測試後,我認爲石英適合我們的需求,並且將來我們可能還需要cron作業。非常感謝你提供這些信息。 – user509755 2011-03-02 00:47:47

1

退房ScheduledExecutors,運行beepForAnHour 10後一次秒鐘,然後每隔10秒後:

import static java.util.concurrent.TimeUnit.*; 
class BeeperControl { 
    private final ScheduledExecutorService scheduler = 
     Executors.newScheduledThreadPool(1); 

    public void beepForAnHour() { 
     final Runnable beeper = new Runnable() { 
       public void run() { System.out.println("beep"); } 
      }; 
     final ScheduledFuture<?> beeperHandle = 
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); 
     scheduler.schedule(new Runnable() { 
       public void run() { beeperHandle.cancel(true); } 
      }, 60 * 60, SECONDS); 
    } 
} 

來源:

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html