1.线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new线程而是直接去池中拿线程即可,节省了开辟子线程的时间,提高的代码执行效率,也便于集中对线程管理。
2.线程池的调用:
public static class ThreadPool{
private ThreadPoolExecutor executor;
private int corePoolSize;//核心线程数
private int maximumPoolSize;//最大线程数
private long keepAliveTime;//保持活跃的时间,也即运作的时间
//构造函数:
public ThreadPool(int corePoolSize,int maximumPoolSize,long keepAliveTime){
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.keepAliveTime = keepAliveTime;
}
//线程池中执行的:
public void execute(Runnable r){
if(executor==null){
executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(),
Executors.defaultThreadFactory(), new AbortPolicy());
}
executor.execute(r);//见当前runnable对象传放在线程池中
}
}
3.项目中应该只能由一个线程池,所以应该将线程池设计为单例模式,代码如下:
private static ThreadPool mThreadPool;
public static ThreadPool getThreadPool(){
if(mThreadPool==null){
synchronized (ThreadManager.class) {
if(mThreadPool==null){
int cpuNum = Runtime.getRuntime().availableProcessors();
int count = cpuNum*2+1;//根据CPU的个数决定线程的个数
mThreadPool = new ThreadPool(count,count,0);
}
}
}
return mThreadPool;
}