线程池的组成很简单,弄一个线程池工厂,然后再弄一个工作队列,然后用Executor这个java自身的框架来处理,基本就ok了,下面放代码
1.首先我们定义一下基本的配置
/**创建一个线程池,用来平时耗时的操作**/
private final static int POOL_SIZE = 4;// 线程池的大小最好设置成为CUP核数的2N
private final static int MAX_POOL_SIZE = 4;// 设置线程池的最大线程数
private final static int KEEP_ALIVE_TIME = 4;// 设置线程的存活时间
private final Executor mExecutor;
2.我们采用单例模式
private final static MyThreadPool myPool = new MyThreadPool();
在类实例的时候,进行一些初始化的操作
@SuppressLint("NewApi")
private MyThreadPool() {
// 创建线程池工厂
ThreadFactory factory = new PriorityThreadFactory("thread-pool", android.os.Process.THREAD_PRIORITY_BACKGROUND);
// 创建工作队列
BlockingQueue<Runnable> workQueue = new LinkedBlockingDeque<Runnable>();
mExecutor = new ThreadPoolExecutor(POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS, workQueue, factory);
}
创建一个类部类,用来创建一个线程池工厂
public class PriorityThreadFactory implements ThreadFactory{
private final String mName;
private final int mPriority;
private final AtomicInteger mNumber = new AtomicInteger();
public PriorityThreadFactory(String name, int priority) {
mName = name;// 线程池的名称
mPriority = priority;//线程池的优先级
}
@Override
public Thread newThread(Runnable r) {
return new Thread(r, mName +"-"+mNumber.getAndIncrement()){
@Override
public void run() {
// 设置线程的优先级
android.os.Process.setThreadPriority(mPriority);
// setPriority(mPriority);
super.run();
}
};
}
}
完成上面的动作,接下来就很简单了,
1.获取我们这个类的单例
public static MyThreadPool getInter(){
return myPool;
}
2.提交任务
// 在线程池中执行线程
public void submit(Runnable command){
mExecutor.execute(command);
}
使用方法如下
创建了一个线程任务
Runnable run = new Runnable() {
@Override
public void run() {
Log.v("这是一个线程任务", "这是一个线程任务");
}
};
MyThreadPool.getInter().submit(run );