public class ExecutorTest {public static void main(String[] args) {//创建线程池的5种方式:
// Executors.newFixedThreadPool();//创建固定线程数的线程池
// Executors.newSingleThreadExecutor();//创建单线程的线程池
// Executors.newCachedThreadPool();//缓存线程池
// Executors.newScheduledThreadPool();//创建可以延迟执行线程池//第5种:ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(16,20,60,TimeUnit.SECONDS,new LinkedBlockingQueue<>(10));//建议1:如果任务是属于cpu运算型任务 推荐核心线程为cpu的核数//建议2:如果任务是属于io型的 推荐核心线程为cpu的2倍数threadPoolExecutor.submit(new Runnable() {@Overridepublic void run() {//任务System.out.println("线程池执行任务");}});}
}
面试题:线程池的执行流程:
流程图:
用户提交任务,查看核心线程池是否满,没满则创建线程,执行任务,
满了则交给缓冲队列,缓冲队列没满,则将任务添加到队列,满了,则
判断最大线程池是否满了,没满则创建线程,执行任务,满了则拒绝策略