android线程池的创建

线程池可以使线程得到复用

/**
* 描述      ThreadPool的代理
* 描述      1.替原对象进行一些操作-->完成初始化操作
* 描述      2.对原对象某些方法进行增强-->不用关心线程池的初始化操作
* 描述      3.只需要暴露使用线程池的时候真正关心的东西即可(执行任务,提交任务,移除任务)
* <p/>
* 更新者    $Author$
* 更新时间  $Date$
* 更新描述  ${TODO}
*/
public class ThreadPoolProxy {


    ThreadPoolExecutor mExecutor;


    private int mCorePoolSize;
    private int mMaximumPoolSize;


    /**
    * @param corePoolSize    核心池大小
    * @param maximumPoolSize 最大线程数,最大线程数和核心池大小保持一致
    */
    public ThreadPoolProxy(int corePoolSize, int maximumPoolSize) {
        mCorePoolSize = corePoolSize;
        mMaximumPoolSize = maximumPoolSize;
    }


    private void initThreadPoolExecutor() {
        if(mExecutor==null || mExecutor.isShutdown() || mExecutor.isTerminated()){
            synchronized (ThreadPoolProxy.class){
                if(mExecutor==null || mExecutor.isShutdown() || mExecutor.isTerminated()){
                    //初始化mExecutor
                    long keepAliveTime = 3000;//保持时间
                    TimeUnit unit = TimeUnit.MILLISECONDS;//保持时间的单位
                    ThreadFactory threadFactory = Executors.defaultThreadFactory();//线程工厂
                    BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>();//任务队列(无界对象)
                    RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardPolicy();//异常捕获器
                    mExecutor = new ThreadPoolExecutor(mCorePoolSize, mMaximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler);
                }
            }
        }
    }


    /*
    执行任务和提交任务的区别?
        是否有返回值
            submit-->有
            execute-->没有
    Future有什么作用,有返回值可以有什么特别的一些效果?
        检测(得知)任务是否执行完成
        等待任务完成
        接收任务执行完成之后的结果
        其中有一个get-->阻塞的方法,可以接收结果,try catch到任务执行过程中抛出的异常
        其中有一个cancel-->取消执行的操作
*/


    /**
    * 执行任务
    * @param task
    */
    public void execute(Runnable task){
        initThreadPoolExecutor();
        mExecutor.execute(task);
    }


    /**
    * 提交任务
    * @param task
    */
    public Future<?>  submit(Runnable task){
        initThreadPoolExecutor();
        Future<?> submit = mExecutor.submit(task);
        return submit;
    }


    /**
    * 管理任务
    * @param task
    */
    public void remove(Runnable task){
        initThreadPoolExecutor();
        mExecutor.remove(task);
    }
}


//threadPoolProxyFactory.java线程池工厂 这里可以创建两种类型的线程池
public class ThreadPoolProxyFactory {
    static ThreadPoolProxy mNormalThreadPoolProxy;
    static ThreadPoolProxy mDownloadThreadPoolProxy;


    /**
    * 得到普通线程池的代理对象
    */
    public static ThreadPoolProxy getNormalThreadPoolProxy() {
        if (mNormalThreadPoolProxy == null) {
            synchronized (ThreadPoolProxyFactory.class) {
                if (mNormalThreadPoolProxy == null) {
                    mNormalThreadPoolProxy = new ThreadPoolProxy(5, 5);
                }
            }
        }
        return mNormalThreadPoolProxy;
    }


    /**
    * 得到下载任务需要的线程池的代理对象
    */
    public static ThreadPoolProxy getDownloadThreadPoolProxy() {
        if (mDownloadThreadPoolProxy == null) {
            synchronized (ThreadPoolProxyFactory.class) {
                if (mDownloadThreadPoolProxy == null) {
                    mDownloadThreadPoolProxy = new ThreadPoolProxy(3, 3);
                }
            }
        }
        return mDownloadThreadPoolProxy;
    }
}


//使用
//new Thread(mLoadDataTask).start();
ThreadPoolProxyFactory.getNormalThreadPoolProxy().submit(Runnable task);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值