2

我已经基于 http://funofprograming.blogspot.co.il/2013/11/priorityexecutorservice-for-java.html实现了一个 PriorityExecutor 并 在 Java 中指定任务顺序执行

但是我想使用ExecutorCompletionService并把它交给PriorityExecutor

但是我得到以下执行:

Caused by: java.lang.ClassCastException: java.util.concurrent.ExecutorCompletionService$QueueingFuture cannot be cast to java.lang.Comparable
    at java.util.concurrent.PriorityBlockingQueue.siftUpComparable(PriorityBlockingQueue.java:347)
    at java.util.concurrent.PriorityBlockingQueue.offer(PriorityBlockingQueue.java:479)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1364)
    at java.util.concurrent.ExecutorCompletionService.submit(ExecutorCompletionService.java:188)
    at com.ibm.modmt.impl.sommosAlg.meta.PoolStrategy.multiSubmit(PoolStrategy.java:160)
    at com.ibm.modmt.impl.sommosAlg.meta.MultiSOMMOSTask.multiSubmit(MultiSOMMOSTask.java:157)
    at com.ibm.modmt.impl.sommosAlg.meta.MultiSOMMOSTask.call(MultiSOMMOSTask.java:85)
    at com.ibm.modmt.impl.sommosAlg.meta.MultiSOMMOSTask.call(MultiSOMMOSTask.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    ... 1 more

似乎完成服务QueueFuture从我的 Comaprable Future 中创建了自己的 Future (a )。

有人用 ExecutorCompletionService 实现了 PriorityExecutor 吗?如果是这样,我是否需要扩展 ExecutorCompletionService ?

4

1 回答 1

2

我看不到使用内置 impl 的任何方法。但是,ExecutorCompletionService 是相当简单的代码并且是 GPL,因此您可以复制它以供自己使用并对其进行修改以处理您的自定义 Future。

于 2015-01-09T14:22:03.910 回答