2012-11-22 61 views
0

如果我使用ThreadPoolExecutor我有各種構造函數,我可以傳遞/使用自己的隊列作爲池的工作隊列。
現在我看到一個ScheduledThreadPoolExecutorThreadPoolExecutor的子類,但構造函數要少得多。
有沒有辦法使用ScheduledThreadPoolExecutor並仍然使用我自己的工作隊列?ScheduledThreadPoolExecutors和自定義隊列

+1

'ScheduledThreadPoolExecutor'的實現似乎是依賴於使用自定義的'DelayedWorkQueue'的。這個類可能不再適用於不同的隊列。 – assylias

+0

其他配置呢?最小最大池大小,keepAlive時間等? – Jim

回答

0

您可以擴展ScheduledThreadPoolExecutor類,然後使用不同的隊列,然後DelayedWorkQueue綁定到當前的ScheduledThreadPoolExecutor實現。請注意,DelayedWorkQueue只是在場景後面使用DelayQueueBlockingQueue實現。

但是如果你只需要配置最小值,最大值,Keepalive消息或其他參數(不需要改變DelayedWorkQueue)你只會延長ThreadPoolExecutor(類似於ScheduledThreadPoolExecutor正在做),並在構造函數,你會做些什麼類似的是什麼ScheduledThreadPoolExecutor構造現在沒做什麼事,委託給ThreadPoolExecutor,如:

super(min, max, keepAliveTime, TimeUnit.NANOSECONDS, 
    new CustomQueue(), threadFactory); 
+0

在你的例子'超(...)'將調用ScheduledThreadPoolExecutor的構造函數。 – assylias

+0

@assylias謝謝,你是對的,我忘了提及,如果他也需要改變參數,他將需要擴展'ThreadPoolExecutor',更新我的答案。 – dan

+0

我需要隊列**和**其他參數 – Jim