线程池以及子线层运用

/**
 * 线程池管理
 */
public class ThreadPoolManager {


private ThreadPoolManager() {
}

         //懒汉式 是加同步锁
// 饿汉式 线程安全
private static ThreadPoolManager instance = new ThreadPoolManager();
private PoolProxy longPoolProxy; //  给联网使用的线程池
private PoolProxy  shortPoolProxy; // 读写文件使用的线程池
public static ThreadPoolManager getInstance() {
return instance;
}


// 联网 
// 读写文件
// 效率最高 cpu 核心数 *2+1
// 1 *2+1
public PoolProxy createLongThreadPool() {
if (longPoolProxy == null) {
longPoolProxy = new PoolProxy(5, 5, 5000);
}
return longPoolProxy;
}


public PoolProxy createShortThreadPool() {
if (shortPoolProxy == null) {
shortPoolProxy = new PoolProxy(3, 3, 5000);
}
return shortPoolProxy;
}


/**
* 配置线程池 代理类 ThreadPoolExecutor 线程池

* @author wxj

*/
public class PoolProxy {
private int corePoolSize;
private int maximumPoolSize;
private long time;
private ThreadPoolExecutor threadPool; // 线程池


public PoolProxy(int corePoolSize, int maximumPoolSize, long time) {
super();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.time = time;
}


@SuppressLint("NewApi")
public void execute(Runnable r) {
/**
* 1.corePoolSize 初始化线程数量 2.maximumPoolSize 出了初始化 线程数量 另外最多 能创建的线程数量
* 3.keepAliveTime 如果没有任务 最多的存活时间 4. TimeUnit时间单位
*/
if (threadPool == null) { // 当线程池 为空的时候才去创建
threadPool = new ThreadPoolExecutor(corePoolSize,
maximumPoolSize, time, TimeUnit.MILLISECONDS,
new LinkedBlockingDeque(10));
}
// 就直接执行任务
threadPool.execute(r);
}


public void cancel(Runnable r) {
// threadPool 不能为空 threadPool 没有崩溃 threadPool 没有停止
if (threadPool != null && !threadPool.isShutdown()
&& !threadPool.isTerminated()) {
threadPool.remove(r);
}
}
}

}


这里在线程池里做好对线层的处理然后就是调用   创建一个线层的工具类,

public class ThreadUtils {


/**
* 子线程执行  给联网 ... 特别耗时的 操作使用
* @param r
*/
public static void runOnBackThread(Runnable r){
// new Thread(r).start();
ThreadPoolManager.getInstance().createLongThreadPool().execute(r);
}
/**
* 子线程执行   给相对联网  耗时少的操作使用
* @param r
*/
public static void runOnShortBackThread(Runnable r){
// new Thread(r).start();
ThreadPoolManager.getInstance().createShortThreadPool().execute(r);
}

private static Handler handler = new Handler();
/**
* 在主线程执行
* @param r
*/
public static void runOnUiThread(Runnable r){
handler.post(r);
}
}


然后下一步就是在界面代码中哪里用到  就在哪里调用工具类的线层:

runOnBackThread ();   runOnShortBackThread(); runOnUiThread();



你可能感兴趣的:(遇到的问题)