在我的Tomcat服务器(+ liferay)上出现了这个异常。
java.util.concurrent.RejectedExecutionException
我的类是这样的:
public class SingleExecutor extends ThreadPoolExecutor {
public SingleExecutor(){
super(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
}
@Override
public void execute(Runnable command) {
if(command instanceof AccessLogInsert){
AccessLogInsert ali = (AccessLogInsert)command;
ali.setConn(conn);
ali.setPs(ps);
}
super.execute(command);
}
}
我在super.execute(command);
这行代码中遇到了这个异常。当LinkedBlockingQueue
的大小为2^31时,可能会出现此错误,但我确定没有那么多命令在等待。
一开始一切都很稳定,但是在重新部署war之后,它就开始出现了。这个类不是war的一部分,而是在tomcat/lib中的一个jar包中。
你有任何想法为什么会发生这种情况以及如何解决吗?
execute(java.lang.Runnable)
方法提交的新任务将被拒绝。这在我的代码中引起了一个bug,我通过在关闭后使线程休眠500毫秒(这可能不是必要的),然后将调度程序设置为null
来解决它,以便下次需要运行任务时,相关方法会检查调度程序是否为null
。如果是,则创建一个新的调度程序。因此,由于关闭而导致的拒绝被消除了。 - Agi Hammerthief