线程池ThreadPool
线程池ThreadPoolExecutor
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 5, 10L, TimeUnit.MINUTES, new LinkedBlockingQueue<Runnable>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy());
corePoolSize:核心线程数量
maximumPoolSize:最大线程数量
keepAliveTime:10L 线程存活时长
TimeUnit:时间单位
BlockingQueue:阻塞队列 长度是可接受的最大等待线程数
ThreadFactory:创建线程工厂,可以自定义线程名等
RejectedExecutionHandler:拒绝策略,如果阻塞队列满了之后要执行的拒绝策略包括四种:
CallRunnerPolicy()-新起一个池外线程来执行任务,
AbortPolicy() 中断策略抛出异常
DiscardPolicy() 直接丢弃策略
DiscardOledstPolicy() 丢弃等待最久线程
CPU密集型时,任务可以少配置线程数,大概和机器的cpu核数相当,这样可以使得每个线程都在执行任务
IO密集型时,大部分线程都阻塞,故需要多配置线程数,2*cpu核数