我有一个像这样的 RejectedExecutionHandler 和一个 Runnable 任务的线程池。
sExecutorService = new ThreadPoolExecutor( ... new MyRejectionHandler() );
interface MyTask extends Runnable { ... }
class MyTaskImpl implements MyTask { ...}
我执行这样的任务
sExecutorService.submit(myTask);
在rejectedExecution 的情况下,我希望获得被拒绝的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