如何在使用Future接口时删除java.util.concurrent.RejectedExecutionException
我有一个控制器,我在其中使用future接口并在threadpool中创建5个线程。此控制器由ajax调用调用。当我第一次调用此控制器时,它运行正常,但如果我再次发出请求,它将显示以下异常如何在使用Future接口时删除java.util.concurrent.RejectedExecutionException,java,multithreading,futuretask,Java,Multithreading,Futuretask,我有一个控制器,我在其中使用future接口并在threadpool中创建5个线程。此控制器由ajax调用调用。当我第一次调用此控制器时,它运行正常,但如果我再次发出请求,它将显示以下异常 java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@1cbbac9 rejected from java.util.concurrent.ThreadPoolExecutor@53ee5
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@1cbbac9 rejected from java.util.concurrent.ThreadPoolExecutor@53ee53[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 5]
我发布了如何调用任务的代码
private static final ExecutorService threadpool = Executors.newFixedThreadPool(20);
FactorialCalculator task1 = new FactorialCalculator("A");
FactorialCalculator task2 = new FactorialCalculator("B");
FactorialCalculator task3= new FactorialCalculator("C");
FactorialCalculator task4 = new FactorialCalculator("D");
FactorialCalculator task5= new FactorialCalculator("E");
System.out.println("Submitting Task ...");
Future future1 = threadpool.submit(task1);
Future future2 = threadpool.submit(task2);
Future future3 = threadpool.submit(task3);
Future future4 = threadpool.submit(task4);
Future future5 = threadpool.submit(task5);
System.out.println("Task is submitted");
在第一个请求中,它运行所有任务-A、B、C、D和E,但当我再次发出请求时,它打印提交的任务,但不打印提交的任务。有人能帮我解释一下我做错了什么。您没有特别提到您使用的是哪个版本的Java,但我怀疑相关的类没有太大的变化。
ThreadPoolExecutor
将在两种情况下从其execute
方法抛出该异常,这两种情况都依赖于执行器的状态为SHUTDOWN
因此,我相当有信心,执行人会拒绝您提交的任务,因为它将在某个时候关闭。我注意到您的代码并没有说明全部情况,因为它看起来像是一个类字段,可能会被其他方法引用。检查您是否在其他地方呼叫关机。(请注意,executor将被其终结器关闭;尽管在您发布的代码块中,它不可能符合垃圾收集的条件,因为它是最终字段。)
作为一个脚注,每当您在代码方面遇到问题时,提供一个。您发布的代码未编译,但在修复此问题后。你能用我的Ideone脚本重现你的问题吗?你没有特别提到你使用的是哪个版本的Java,但我怀疑相关的类没有太大变化。
ThreadPoolExecutor
将在两种情况下从其execute
方法抛出该异常,这两种情况都依赖于执行器的状态为SHUTDOWN
因此,我相当有信心,执行人会拒绝您提交的任务,因为它将在某个时候关闭。我注意到您的代码并没有说明全部情况,因为它看起来像是一个类字段,可能会被其他方法引用。检查您是否在其他地方呼叫关机。(请注意,executor将被其终结器关闭;尽管在您发布的代码块中,它不可能符合垃圾收集的条件,因为它是最终字段。)
作为一个脚注,每当您在代码方面遇到问题时,提供一个。您发布的代码未编译,但在修复此问题后。你能用我的Ideone脚本来重现你的问题吗?真的关闭了executor?真的关闭了executor?请注意,当你水平滚动问题的异常消息时,你可以从executor的
toString()中看到
输出其状态确实是终止的
…请注意,当您水平滚动问题的异常消息时,您可以从执行者的toString()
输出中看到其状态确实是终止的
…