软件编程
位置:首页>> 软件编程>> Android编程>> Android编程自定义线程池与用法示例

Android编程自定义线程池与用法示例

作者:LovooGod  发布时间:2021-11-27 14:46:53 

标签:Android,线程池

本文实例讲述了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程序设计有所帮助。

来源:http://blog.csdn.net/lovoo/article/details/51714023

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com