1、每次new Thread 新建对象,性能差
2、线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM
3、缺少更多功能,如更多执行、定期执行、线程中断
1、重用存在的线程,减少对象创建、消亡的开销,性能佳
2、可有效控制最大并发线程,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞
3、提供定时执行、定期执行、单线程、并发数控制等功能
1、corePoolSize:核心线程数量
2、maximumPoolSize: 线程最大线程数
3、workQueue: 阻塞队列,存储等待执行的任务,很重要,会对线程池运行过程产生重大影响。
4、keepAliveTime: 线程没有任务执行是最多保持多久时间终止
5、unit: keepAliveTime的时间单位
6、threadFactory: 线程工厂,用来创建线程
7、rejectHandler: 当拒绝处理任务时的策略
shutdown 阻塞队列为空 线程池中的工作线程数量为0 terminated shutdownNow 线程池中的工作线程数量为0 RUNNING SHUTDOWN TIDYING TERNINATED STOP1、execute():提交任务,交给线程池执行
2、submit():提交任务,能够返回执行结果 execute + Future
3、shutdown(): 关闭线程池,等待任务都执行完
4、shutdownNow(): 关闭线程池,不等待任务执行完
5、getTaskCount(): 线程池已执行和未执行的任务总数
6、getCompletedTaskCount():已完成的任务数量
7、getPoolSize(): 线程池当前的线程数量
8、getActiveCount(): 当前线程池中正在执行任务的线程数量
1、Executors.nweCachedThreadPool
2、Executors.newFixedThreadPool
3、Executors.newScheduledThreadPool
4、Executors.newSingleThreadExecutor
1、CPU 密集型任务,就需要尽量压榨CPU ,参考值可以设为NCPU + 1
2、IO 密集型任务,参考值可以设置为2*NCPU