Java 从ThreadPoolExecutor拒绝的未来任务

Java 从ThreadPoolExecutor拒绝的未来任务,java,java.util.concurrent,Java,Java.util.concurrent,我有一个ThreadPoolExecutor,我向它提交了一个任务 private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1)); 以下代码停止该任务 protected synchronized void stop(StrategyEntry entry) thr

我有一个
ThreadPoolExecutor
,我向它提交了一个任务

private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1));
以下代码停止该任务

protected synchronized void stop(StrategyEntry entry) throws Exception {
    for (Object future : futures) {
      ((Future<?>) future).cancel(true);
    }
    futures.clear();

    threadPoolExecutor.shutdown();
}
受保护的同步作废停止(StrategyEntry)引发异常{
对象(未来:未来){
((未来)未来)。取消(真);
}
期货;
threadPoolExecutor.shutdown();
}
这里的问题是:当我试图停止任务时,我遇到以下异常:

任务java.util.concurrent。FutureTask@3a475611已从java.util.concurrent中拒绝。ThreadPoolExecutor@216393fb[已终止,池大小=0,活动线程=0,排队任务=0,已完成任务=1]


问题是您在stop方法中使用了执行器
shutdown()。如果您只想等待任务完成,请使用
Future.get()
。当执行器关闭时,无法再向其提交任务


shutdown()
只应在您确实想要终止应用程序时使用。

您是否调用
shutdown()
在此执行器上的任何位置?您正在创建一个容量为1的备用队列-其中是否已存在其他任务?@Andy从他得到的错误中可以清楚地看到,执行器处于
终止
状态-这就是导致异常的原因。如果其他任务已存在,executor将拒绝该任务,它将被catch块捕获,并且永远不会显示在GUI中。代码中的哪一行引发异常?异常的类型是什么?当executor关闭时,我不希望执行任何新任务submitted@MMPgm从您的问题来看,您并不完全清楚
stop()
方法实际要做什么。也许您可以澄清一下?Stop方法应该杀死所有等待的任务,并且不应该接受任何其他任务。我只是想知道发生异常的可能情况。
protected synchronized void stop(StrategyEntry entry) throws Exception {
    for (Object future : futures) {
      ((Future<?>) future).cancel(true);
    }
    futures.clear();

    threadPoolExecutor.shutdown();
}