作者回复: 有可能第一次尝试放队列是满的,失败,再尝试创建临时线程,也满了,但是这个过程中,队列中的任务可能被临时线程消费了一部分,再往队列中送可能会成功。
作者回复: 可以加锁,但是没有必要多次调用,调一次把结果存起来就行。
作者回复: offer方法返回false表示添加失败,添加失败就会创建新线程。
TaskQueue的父类总是返回true,但是TaskQueue就不会总是返回true了,可能是false,区别在这里。
作者回复: 为了解决这个问题,Tomcat的定制版任务队列TaskQueue 重写了 LinkedBlockingQueue 的 offer 方法,在合适的时机返回 false,返回 false 表示任务添加失败,这时线程池会创建新的线程。
作者回复: 对的
作者回复: 是的,这个地方Tomcat的实现可以简化。
作者回复: 1.可以调用ThreadPoolExecutor的这个方法来指定是否回收核心线程:
public void allowCoreThreadTimeOut(boolean value)
2.kill进程会立即退出,内核会负责清理这个进程的所有资源。
作者回复: 谢谢