【发布时间】:2015-07-30 19:07:14
【问题描述】:
我有这样的thread pool with a RejectedExecutionHandler 和一个 Runnable 任务。
sExecutorService = new ThreadPoolExecutor( ... new MyRejectionHandler() );
interface MyTask extends Runnable { ... }
class MyTaskImpl implements MyTask { ...}
我执行这样的任务
sExecutorService.submit(myTask);
在被拒绝的执行案例中,我希望获得被拒绝的 Runnable(即 MyTask)并在其中设置一些字段,将其标记为被拒绝。但我无法将其投射到 MyTask。 那么传递给rejectExecution 的runnable 到底是什么?我提交的似乎不是 MyTask 。以及如何在 RejectedExecutionHandler 中获取被拒绝的任务。
public class MyRejectionHandler implements RejectedExecutionHandler{
public void rejectedExecution(Runnable runnable, ThreadPoolExecutor executor) {
MyTask myTask = (MyTask) runnable; // exception
myTask.doSomething();
}
java.lang.ClassCastException: java.util.concurrent.FutureTask cannot be cast to MyTask
【问题讨论】:
-
此链接给出了 ThreadPoolExecutor 和 RejectionHandler 的示例。但它没有解释任何关于我提出的非常具体的问题,也无法推断出任何内容。
标签: java threadpool