欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程自定義線程池與用法示例

 更新時(shí)間:2017年12月28日 12:07:22   作者:LovooGod  
這篇文章主要介紹了Android編程自定義線程池與用法,結(jié)合實(shí)例形式分析了Android線程池的功能、定義及簡單使用方法,需要的朋友可以參考下

本文實(shí)例講述了Android編程自定義線程池與用法。分享給大家供大家參考,具體如下:

一、概述:

1、因?yàn)榫€程池是固定不變的,所以使用了單例模式
2、定義了兩個(gè)線程池,長的與短的,分別用于不同的地方。因?yàn)槭褂昧藛卫J?,所以定義兩個(gè)。
3、定義了兩個(gè)方法,執(zhí)行的與取消的

二、代碼:

/**
 * @描述    線程管理池
 * @項(xiàng)目名稱   App_Shop
 * @包名     com.android.shop.manager
 * @類名     ThreadManager
 * @author   chenlin
 * @date    2014年3月29日 下午10:17:06
 */
public class ThreadManager {
  private ThreadManager(){};
  private static ThreadManager instance= new ThreadManager();
  private ThreadPoolProxy longPoolProxy;
  private ThreadPoolProxy shortPoolProxy;
  public static ThreadManager getInstance(){
    return instance;
  }
  /**
   * 長線程池
   * @return
   */
  public synchronized ThreadPoolProxy createLongPool(){
    if (longPoolProxy == null) {
      //(int corePoolSize 線程池大小, int maximumPoolSize 最大值, long keepAliveTime 存活時(shí)間)
      longPoolProxy = new ThreadPoolProxy(5, 5, 5000);
    }
    return longPoolProxy;
  }
  /**
   * 短線程池
   * @return
   */
  public synchronized ThreadPoolProxy createShortPool(){
    if (shortPoolProxy == null) {
      shortPoolProxy = new ThreadPoolProxy(3, 3, 5000);
    }
    return shortPoolProxy;
  }
  public class ThreadPoolProxy{
    private ThreadPoolExecutor pool;
    private int corePoolSize; //線程數(shù)
    private int maximumPoolSize; //線程滿了后額外開的線程窗口
    private long keepAliveTime;//沒有線程執(zhí)行時(shí)存活時(shí)間
    public ThreadPoolProxy(int corePoolSize,int maximumPoolSize, long keepAliveTime){
      this.corePoolSize = corePoolSize;
      this.maximumPoolSize = maximumPoolSize;
      this.keepAliveTime = keepAliveTime;
    }
    /**
     * 執(zhí)行線程
     * @param runnable
     */
    public void execute(Runnable runnable){
      if (pool == null) {
        //最多可有多少個(gè)線程排隊(duì)
        BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(10);
        pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, workQueue);
      }
      pool.execute(runnable);
    }
    /**
     * 取消線程
     * @param runnable
     */
    public void cancel(Runnable runnable){
      if (pool != null) {
        pool.remove(runnable);
      }
    }
  }
}

三、使用方法:

ThreadManager.getInstance().createLongPool().execute(new Runnable() {
  @Override
  public void run() {
    //SystemClock.sleep(2000);
    final LoadResult result = loadFromServer();
    if (result != null) {
      Util.runOnUiThread(new Runnable() {
        @Override
        public void run() {
          currentState = result.getValue();
          showPages();
        }
      });
    }
  }
});

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android線程與消息機(jī)制用法總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論