线程池的的优势
- 通过复用的方式,省去了频繁创建线程和销毁线程的资源消耗,从而还能提高响应速度
- 线程属于稀缺资源,因此使用线程池在一定程度上可以防止系统崩溃
线程池的核心参数(7个)
- corePoolSIze:核心线程数,这些线程一旦被创建就不会被销毁,直到线程池被销毁
- maximumPoolSize:最大线程数,当核心线程数被使用完,并且任务队列满了时,如果还有任务就会创建线程直到最大线程数
- keepAliveTime:空闲时间,除核心线程外的其他线程的最大空闲时间,当到达这个时间就会销毁这些线程
- unit:空闲时间的时间单位
- workQueue:任务队列,当核心线程用完了时,如果还有任务就会放到该阻塞队列中,等待核心线程的调度
- threadFactory:创建线程的工厂,由程序员指定创建线程的方式
- handler:拒绝策略,当达到最大线程数并且阻塞队列已满时,如果还有任务就会触发拒绝策略
handler拒绝策略
- ThreadPoolExecutor.AbortPolicy() :抛出java.util.concurrent.RejectedExecutionException异常
- ThreadPoolExecutor.CallerRunsPolicy() : 重试添加当前的任务,他会自动重复调用execute()方法
- ThreadPoolExecutor.DiscardOldestPolicy() : 抛弃旧的任务
- ThreadPoolExecutor.DiscardPolicy() : 抛弃当前的任务
线程池的创建方式
- newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
- newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
- newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
- newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
posted @
2022-03-18 16:39
蓝狐痕
阅读(
69)
评论()
收藏
举报