91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

锦屏县| 龙南县| 淮安市| 莱州市| 临安市| 汉寿县| 连云港市| 宜君县| 娄底市| 新乐市| 大悟县| 谢通门县| 安达市| 奉新县| 南平市| 富民县| 易门县| 洱源县| 秦安县| 雅安市| 阳朔县| 防城港市| 梁河县| 桃江县| 武平县| 阿鲁科尔沁旗| 右玉县| 隆德县| 西华县| 同江市| 内黄县| 铁岭市| 涿州市| 荃湾区| 郸城县| 收藏| 苍梧县| 秀山| 喀喇沁旗| 永泰县| 苍溪县|