的定义ExecutorService.newCachedThreadPool()是public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), threadFactory);}它创建一个带有游泳池corePoolSize = 0,maximumPoolSize = Integer.MAX_VALUE和一个无界队列。但是在它的文档中ThreadPoolExecutor说:当在方法 execute(java.lang.Runnable) 中提交新任务,并且运行的线程少于 corePoolSize 时,即使其他工作线程空闲,也会创建一个新线程来处理请求。如果运行的线程多于 corePoolSize 但少于 maximumPoolSize ,则只有在队列已满时才会创建新线程。那么corePoolSize = 0在这种情况下如何工作?最初,有 0 个线程,所以虽然它在文档中没有说,但我认为它会为提交的第一个任务创建一个新线程。但是,现在我们有 1 个线程 > corePoolSize = 0,和 1 个线程 < maximumPoolSize = Integer.MAX_VALUE,根据上面的文档“只有当队列已满时才会创建一个新线程”,但是队列是无界的永远不会创建新线程,而我们只能使用 1 个线程?
添加回答
举报
0/150
提交
取消