このような RejectedExecutionHandler と Runnable タスクを持つスレッドプールがあります。
sExecutorService = new ThreadPoolExecutor( ... new MyRejectionHandler() );
interface MyTask extends Runnable { ... }
class MyTaskImpl implements MyTask { ...}
私はこのようなタスクを実行します
sExecutorService.submit(myTask);
rejectExecution の場合、拒否された Runnable (つまり MyTask) を取得し、拒否されたものとしてマークするフィールドを設定することを望んでいました。しかし、それを MyTask にキャストできません。では、 rejectExecution に渡される runnable とは正確には何でしょうか? MyTask i submit ではないようです。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