java线程池ThreadPoolExecutor的使用

package zy.just.com.googleplaydemo.manager;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**  * 管理线程池  * Created by print on 2016/3/8.  */ public class ThreadManager {

    //把构造方法私有。  private ThreadManager() {

    }

    private static ThreadManager instance = new ThreadManager();
    private ThreadPoolProxy longPool;
    private ThreadPoolProxy shortPool;

    public static ThreadManager getInstance() {
        return instance;//返回线程管理者的实例。  }

    // 连接网络比较耗时。  // 读取本地文件比较快。   /**  * 提供创建线程池的方法, 开多少个线程的效率最高,cpu的核数*2+1,例如单核cpu最好开3个线程,双核cpu最好开5个线程。  */  // 这个线程池用于连接网络等耗时操作。注意:这个方法必须保证线程同步。  public synchronized ThreadPoolProxy createThreadLongPoolProxy() {
        if (longPool == null) {
            longPool = new ThreadPoolProxy(5, 5, 5000L);
        }
        return longPool;
    }

    // 执行读取本地文件等相对比较快的操作。  public synchronized ThreadPoolProxy createThreadShortPoolProxy() {
        if (shortPool == null) {
            shortPool = new ThreadPoolProxy(3, 3, 5000L);
        }
        return shortPool;
    }

    /**  * 内部类,线程池配置(代理)  */  public class ThreadPoolProxy {

        //这个类代表线程池  private ThreadPoolExecutor pool;
        private int corePoolSize;//这个线程池中管理多少个线程  private int maximumPoolSize;
        private long time;

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

        public void execute(Runnable runnable) {
            if (pool == null) {
                //创建线程池  /**  * 1.corePoolSize:这个线程池中管理多少个线程。  * 2.如果LinkedBlockingDeque满了,则额外开的线程数。 3.如果线程池已经没有任务了,设置它还能存活多久。  * 4.时间内单位 (一般用毫秒)5.如果线程池里的管理的线程都已经在使用中,(即没有空余线程了),  * 剩下的任务都先临时存到LinkedBlockingDeque(10)对象中排队,10表示最多有10个任务在排队。  */  pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, time, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<Runnable>(10));
            }
            //线程池执行任务  pool.execute(runnable);//调用线程池执行异步任务。  }

        /**  * 停止一个任务  */  public void cancel(Runnable runnable) {
            // 分别表示线程池是否为空,线程池是否崩溃了,线程池是否停止了。  if (pool != null && !pool.isShutdown() && !pool.isTerminated()) {
                // 移除一个异步任务  pool.remove(runnable);
            }
        }
    }
}

你可能感兴趣的:(java线程池ThreadPoolExecutor的使用)