线程池的优点
一、执行大量任务时能提供较好的性能,可复用线程,减少线程的创建和销毁的开销
二、提供资源限制和管理的手段,可控制并发数。
线程池参数
1、corePoolSize:核心线程个数
2、workQueue:阻塞队列,比如有界ArrayBlockingQueue、无界LinkedBlockingQueue、最多一个的SynchronousQueue、优先级队列PriorityBlockingQueue
3、maximunPoolSize:最大线程数
4、threadPoolFactory:线程工厂,设置线程名方便查看日志
5、rejectedExecutionHandler:拒绝策略,用于线程池达到最大线程数后采取的策略 分别是AbortPolicy(抛出异常)、CallRunnerPolicy(使用调用者的线程来运行任务)、DiscardOldstPolicy(丢弃最老的任务)及DiscardPolicy(丢弃新加的线程,不抛出异常)
6、keepAliveTime:存活时间
7、TimeUnit:存活时间单位
线程池构造方法
1、使用Executors.newxxxThreadPool的方法来创建线程池,一般不推荐
2、使用ThreadPoolExecutor的构造函数来创建
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
线程创建方式
1、继承Thread类
2、实现Runable接口
3、实现Callable接口
线程状态
启动线程需调用start()方法,而不是run()方法。调用run()方法只是类的普通方法,start()方法用于初始化线程,使线程处于就绪Runable状态。当线程获取到CPU时间片段时,就会进入运行Running状态,执行run()方法。