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

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

本文实例讲述了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

标签:Android,线程池
0
投稿

猜你喜欢

  • Java中继承thread类与实现Runnable接口的比较

    2022-06-09 12:57:09
  • 浅谈Java之终止继承:Final类和Fianl方法

    2023-02-14 00:07:08
  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    2021-07-12 04:16:10
  • Android基于TextView实现的跑马灯效果实例

    2023-10-07 02:45:05
  • C#自定义控件实现TextBox禁止粘贴的方法

    2023-08-03 06:00:22
  • SpringMVC执行过程详细讲解

    2023-06-07 10:04:54
  • Java深入浅出数组的定义与使用上篇

    2022-03-10 22:32:58
  • Java实现迅雷地址转成普通地址实例代码

    2023-04-10 19:44:52
  • 详解Spring中使用@within与@target的区别

    2022-11-18 17:58:24
  • C#11新特性使用案例详解

    2023-11-26 03:19:15
  • 浅谈c++11线程的互斥量

    2023-02-14 18:00:44
  • Android使用Gallery实现照片拖动的特效

    2022-12-31 23:04:22
  • Java实现TopK问题的方法

    2023-11-10 20:32:14
  • Android 资源 id详解及的动态获取

    2023-06-25 00:32:21
  • Java 类与对象超基础讲解

    2023-06-12 00:03:22
  • C#如何防止程序多次运行的技巧

    2022-11-10 01:18:59
  • java面向对象设计原则之合成复用原则示例详解

    2023-11-09 16:55:51
  • 在mybatis 中使用if else 进行判断的操作

    2021-11-10 23:17:11
  • Android中断线程的处理方法

    2023-07-31 11:51:55
  • Android加载Assets目录中Xml布局文件

    2021-06-19 14:59:53
  • asp之家 软件编程 m.aspxhome.com