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() {
@Override
public void run() {
//任务
System.out.println("线程池执行任务");
}
});
}
}
面试题:线程池的执行流程:
流程图:
用户提交任务,查看核心线程池是否满,没满则创建线程,执行任务,
满了则交给缓冲队列,缓冲队列没满,则将任务添加到队列,满了,则
判断最大线程池是否满了,没满则创建线程,执行任务,满了则拒绝策略