第9章 Java中的线程池
线程池优势:
①减少资源消耗
②提高响应速度
③统一管理
9.1 线程池的实现原理
当任务来后
①判断核心线程池是否已满,若未满,创建一个核心线程来执行任务
②若无空闲核心线程且核心线程已满,则将任务放入任务队列
③若队列已满或无队列,且线程数未到最大线程数,则创建线程执行(到时候销毁大于核心线程数小于最大线程数的线程)
④若已达最大线程数,则走饱和任务处理流程
9.2 线程池的使用
创建线程池:new ThreadPoolExecutor
提交任务:execute(Runnable)无返回值,submit(FutureTask)有返回值,通过get方法阻塞获取
关闭线程池:shutdown/shutdownNow
9.2.4 合理配置线程池
①cpu密集型,cpu核数+1
②io密集型,cpu核数x2
③依赖数据库连接池,需等待返回吗,可多创线程,但不能多于连接数
④使用有界队列,防止内存溢出
9.2.5 线程池的监控
P207