亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-26 12:56:58 來源:腳本之家 閱讀:168 作者:LovooGod 欄目:移動開發

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

一、概述:

1、因為線程池是固定不變的,所以使用了單例模式
2、定義了兩個線程池,長的與短的,分別用于不同的地方。因為使用了單例模式,所以定義兩個。
3、定義了兩個方法,執行的與取消的

二、代碼:

/**
 * @描述    線程管理池
 * @項目名稱   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 存活時間)
      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; //線程數
    private int maximumPoolSize; //線程滿了后額外開的線程窗口
    private long keepAliveTime;//沒有線程執行時存活時間
    public ThreadPoolProxy(int corePoolSize,int maximumPoolSize, long keepAliveTime){
      this.corePoolSize = corePoolSize;
      this.maximumPoolSize = maximumPoolSize;
      this.keepAliveTime = keepAliveTime;
    }
    /**
     * 執行線程
     * @param runnable
     */
    public void execute(Runnable runnable){
      if (pool == null) {
        //最多可有多少個線程排隊
        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();
        }
      });
    }
  }
});

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

希望本文所述對大家Android程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

香港| 横山县| 东至县| 温泉县| 封丘县| 博野县| 红安县| 永胜县| 富阳市| 武威市| 富宁县| 汉沽区| 兴城市| 淮安市| 抚顺县| 绥棱县| 甘南县| 广灵县| 侯马市| 斗六市| 临沧市| 仪征市| 启东市| 枣庄市| 陆丰市| 禹城市| 遂溪县| 普兰县| 武平县| 罗源县| 中卫市| 福清市| 崇信县| 永济市| 乐业县| 磐安县| 施秉县| 浑源县| 龙南县| 五华县| 江津市|