线程池
new Thread()弊端
每次new Thread新建对象,性能差
线程缺乏统一管理,可能无限的新建线程,相互竞争,有可能占用过多系统资源导致死机
线程池的好处
重用已存在的线程,减少对象创建、消亡开销,性能佳
可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞
提供定时执行、定期执行、单线程、并发控制能高级功能
corePoolSize:核心线程数量
maximumPoolSize:线程最大线程数
workQueue:阻塞队列,存储等待执行的任务,很重要,会对线程池运行过程中产生重大影响
三者的关系:如果运行线程数少于corePoolSize,直接创建新线程来处理任务,即使线程池其它线程是空闲的,如果线程池的线程数量大于等于corePoolSize并且小于maxmumPoolSize的时候,则只有当workQueue满的时候,才创建新的线程来处理任务,如果我们设置corePoolSize和maxmumPoolSize值相同时,那么创建线程池大小时固定的,如果有新任务提交,在workQueue还没有满的时候,就把请求放到workQueue里面等待有空闲的线程就从里面取出任务进行处理如果我们的线程数量大于设置的maxmumPoolSize,workQueue也已经满了,那么就通过拒绝策略(rejectHandler)来指定策略来处理任务
KeepAliveTime:线程没有任务执行时最多保持多久时间终止
unit:keepAliveTime的时间单位
threadFactory:线程工厂,用来创建工厂
rejectHandler:当拒绝处理任务时的策略,线程池有4种策略,1、直接抛出异常,默认策略。2、用调用者所在的线程来处理任务,3、丢弃队列中最靠前的任务,并执行当前任务。4、直接丢弃任务
线程状态
1、新建状态(New):新创建了一个线程对象。
2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行&