public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler);
假如线程池线程数目太小,当有大量请求必要处理,必要创建非核心线程池处理,导致系统响应比较慢,会影响用户体验,甚至会出现使命队列大量堆积使命导致OOM。
假如核心线程池数目太大,会导致其一直阻塞在那里等候使命队列的使命来实行,斲丧内存。而且大量线程可能会同时抢占 CPU 资源,这样会导致大量的上下文切换,从而增加线程的实行时间,影响了实行效率。
根据线程数设置依据
这种使命斲丧的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,多出来的一个线程是为了防止某些原因导致的线程阻塞(如IO操纵,线程sleep,等候锁)而带来的影响。一旦某个线程被阻塞,开释了CPU资源,而在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。
I/O 密集型使命(2N):