从ThreadPoolExecutor
JavaDoc(重点是我的)
在方法提交的新任务
execute(java.lang.Runnable)将被拒绝
时,Executor已经关机时,也Executor使用有限的边界两个最大线程和工作队列容量,且饱和。无论哪种情况,execute方法都将调用其RejectedExecutionHandler.rejectedExecution(java.lang.Runnable,java.util.concurrent.ThreadPoolExecutor)方法RejectedExecutionHandler。提供了四个预定义的处理程序策略:1.
默认情况下ThreadPoolExecutor.AbortPolicy,处理程序RejectedExecutionException在拒绝时抛出运行时。
2.
在中ThreadPoolExecutor.CallerRunsPolicy,调用执行自己的线程运行任务。这提供了一种简单的反馈控制机制,它将降低新任务的提交速度。
3. 在中ThreadPoolExecutor.DiscardPolicy,简单地删除了无法执行的任务。
4.
在中ThreadPoolExecutor.DiscardOldestPolicy,如果未关闭执行程序,则将丢弃工作队列开头的任务,然后重试执行(这可能再次失败,从而导致重复执行此操作)。可以定义和使用其他种类的
RejectedExecutionHandler类。这样做需要格外小心,尤其是在设计策略仅在特定容量或排队策略下才能工作时。
因此,大概是重新加载战争会触发的关闭
Executor。尝试将相关的库放入战场,以便Tomcat
ClassLoader更有机会正确地重新加载您的应用程序。



