当向ExecutorService提交任务时,如果ExecutorService已经关闭或者无法接受新的任务,则会抛出RejectedExecutionException异常。为了解决这个问题,可以采用以下方法:
下面是一个示例代码,展示如何解决这个问题:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
public class ExecutorServiceExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(5);
try {
while (!executorService.isShutdown()) {
try {
// 提交任务
executorService.submit(new RunnableTask());
} catch (RejectedExecutionException e) {
// 处理RejectedExecutionException异常
// 例如,将任务重新放入队列中等待执行
// 或者记录日志并忽略该异常
System.out.println("任务被拒绝执行");
}
}
} finally {
// 关闭ExecutorService
executorService.shutdown();
}
}
static class RunnableTask implements Runnable {
@Override
public void run() {
// 执行任务的代码
}
}
}
在上面的示例中,我们使用一个while循环来不断向ExecutorService提交任务,直到ExecutorService被关闭。如果在提交任务时出现RejectedExecutionException异常,我们通过捕获该异常来处理它。然后,我们在finally块中关闭ExecutorService,以确保所有任务都能得到执行并且资源得到释放。
下一篇:不断向后遍历数组