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相关内容感兴趣的读者可查看本站专题:《Android线程与消息机制用法总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android Handler主线程和一般线程通信的应用分析

    Handler的定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI.解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作.如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会

  • Android 线程之自定义带消息循环Looper的实例

    Android 线程之自定义带消息循环Looper的实例 Android系统的UI线程是一种带消息循环(Looper)机制的线程,同时Android也提供了封装有消息循环(Looper)的HandlerThread类,这种线程,可以绑定Handler()对象,并通过Handler的sendMessage()函数向线程发送消息,通过handleMessage()函数,处理线程接收到的消息.这么说比较抽象,那么,本文就利用基础的Java类库,实现一个带消息循环(Looper)的线程,以帮助初学者理解

  • Android 在其他线程中更新UI线程的解决方法

    方法一:Activity.runOnUiThread(Runnable )(经验之道: 这个最好用, 凡是要刷新页面的地方,Activity.runOnUiThread( new Runnable()  { public void run(){更新UI}}); 方法二:子线程调用Handler的sendMessage(message)发送事件. 复制代码 代码如下: mHandler = new Handler() {     @Override     public void handleMe

  • Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例

    本文实例讲述了Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能的方法.分享给大家供大家参考,具体如下: 1.布局界面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare

  • android使用多线程更新ui示例分享

    Android线程涉及的技术有:Handler;Message;MessageQueue;Looper;HandlerThread. 下面看一段在线程中更新UI的代码: 复制代码 代码如下: public class MainActivity extends Activity {private TextView timeLable;private Button stopBtn;private Thread mThread;private boolean isRunning = true;priv

  • 浅谈Android 的线程和线程池的使用

    Android 的线程和线程池 从用途上分,线程分为主线程和子线程:主线程主要处理和界面相关的事情,子线程则往往用于耗时操作. 主线程和子线程 主线程是指进程所拥有的线程.Android 中主线程交 UI 线程,主要作用是运行四大组件以及处理它们和用户的交互:子线程的作业则是执行耗时任务. Android 中的线程形态 1.AsyncTask AsyncTask 是一种轻量级的异步任务类,可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新 UI, AsyncTas

  • Android开发笔记之:如何安全中止一个自定义线程Thread的方法

    经研究,我推荐这种写法: 复制代码 代码如下: <SPAN xmlns="http://www.w3.org/1999/xhtml">/*自定义线程*/ class MyThread implements Runnable{  public void run() {   // TODO Auto-generated method stub //  定义自己的变量                         while(!Thread.currentThread().is

  • 在Android线程池里运行代码任务实例

    本节展示如何在线程池里执行任务.流程是,添加一个任务到线程池的工作队列,当有线程可用时(执行完其他任务,空闲,或者还没执行任务),ThreadPoolExecutor会从队列里取任务,并在线程里运行. 本课同时向你展示了如何停止正在运行的任务. 在线程池里的线程上执行任务 在ThreadPoolExecutor.execute()里传入 Runnable对象启动任务.这个方法会把任务添加到线程池工作队列.当有空闲线程时,管理器会取出等待最久的任务,在线程上运行. 复制代码 代码如下: publi

  • Android自带的四种线程池使用总结

    在Android开发中,如果我们要执行某个耗时任务,一般都会考虑开启一个线程去处理. 因为我们都知道一个线程run方法执行完毕后,才算真正结束,但是,这只是结束,并没有被回收,会一直闲置在那里,等待GC去回收,所以如果每执行一个任务,我们都new一个线程,那么在某些极端的场景下,是比较消耗内存的. 之前的内存优化的文章中,我讲过关于android中的池的概念,也就是复用的机制,那么对于线程也有个线程池. 这篇文章先简单介绍下Android中自带的四种线程池: 1 .newCachedThread

  • Android多线程及异步处理问题详细探讨

    1.问题提出 1)为何需要多线程? 2)多线程如何实现? 3)多线程机制的核心是啥? 4)到底有多少种实现方式? 2.问题分析 1)究其为啥需要多线程的本质就是异步处理,直观一点说就是不要让用户感觉到"很卡". eg:你点击按钮下载一首歌,接着该按钮一直处于按下状态,那么用户体验就很差. 2)多线程实现方式implements Runnable 或 extends Thread 3)多线程核心机制是Handler 4)提供如下几种实现方式 --1-–Handler ----------

  • android开发教程之子线程中更新界面

    每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联.Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器.2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息.当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了.由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面.

  • Handler与Android多线程详解

    下面是一段大家都比较熟悉的代码: 复制代码 代码如下: Handler handler = new Handler(); handler.post(myThread); //使用匿名内部类创建一个线程myThreadRunnable mythread = new Runnable() {public void run() {}}; 一开始,相信很多人都以为myThread中的run()方法会在一个新的线程中运行,但事实并非如此. 上述代码中的handler并没有调用线程myThread的star

随机推荐