美文网首页
Android 中的线程和线程池

Android 中的线程和线程池

作者: L_Xian | 来源:发表于2016-05-27 17:21 被阅读57次

Android中扮演线程角色,除了 Thread 之外,AsyncTask 和 IntentService 也是。同时 HandlerThread 也是一种特殊的线程。

对于 AsyncTask,底层用到了线程池。
对于 IntentService 和 HandlerThread,底层直接使用线程。

AsyncTask 封装了 线程池 和 Handler,它主要是为了方便在子线程中更新 UI。不适合进行特别耗时的任务,对于特别耗时的任务,建议采用线程池。

HandlerThread 是一种具有消息循环的线程,在它内部可以使用 Handler。

IntentService 是一个服务,内部采用 HandlerThread 来执行任务,当任务执行完毕后 IntentService 会自动退出,它不容易被系统杀死从而可以尽量保证任务的执行,这是它的优点。

AsyncTask 构造线程池的方法:

   //获取当前的cpu核心数  
   private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();  
   //线程池核心容量  
   private static final int CORE_POOL_SIZE = CPU_COUNT + 1;  
   //线程池最大容量  
   private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;  
   //过剩的空闲线程的存活时间  
   private static final int KEEP_ALIVE = 1;  
   //ThreadFactory 线程工厂,通过工厂方法newThread来获取新线程  
   private static final ThreadFactory sThreadFactory = new ThreadFactory() {  
       //原子整数,可以在超高并发下正常工作  
       private final AtomicInteger mCount = new AtomicInteger(1);  
 
       public Thread newThread(Runnable r) {  
           return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());  
       }  
   };  
   //静态阻塞式队列,用来存放待执行的任务,初始容量:128个  
   private static final BlockingQueue<Runnable> sPoolWorkQueue =  
           new LinkedBlockingQueue<Runnable>(128);  
 
   /** 
    * 静态并发线程池,可以用来并行执行任务,尽管从3.0开始,AsyncTask默认是串行执行任务 
    * 但是我们仍然能构造出并行的AsyncTask 
    */  
   public static final Executor THREAD_POOL_EXECUTOR  
           = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,  
                   TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);  

相关文章

  • Android线程池的使用

    一、线程与线程池,为什么要使用线程池 1、Android中的线程 在Android中有主线程和子线程的区分。主线程...

  • 笔记:Android线程和线程池

    Android线程和线程池 Android中的线程操作相关的类有 AsyncTask IntentService ...

  • Android面试之线程和线程池

    Android中的线程形态 AsyncTask底层用到了线程池。AsyncTask封装了线程池和Handler,它...

  • <> Chapter 11

    Android的线程和线程池 主线程和子线程 Android中的主线程也叫UI线程,主要作用是运行四大组件以及处理...

  • Android 开发艺术探索读书笔记 11 -- Android

    本篇文章主要介绍以下几个知识点:主线程和子线程Android 中的线程形态Android 中的线程池 11.1 主...

  • 线程池

    话题:线程池Android中的线程池有哪些?它们的区别是什么?为什么要使用线程池? 线程是Android里面一个很...

  • Android的线程和线程池

    Android的线程和线程池 标签(空格分隔): android 一些概念: 线程分类:主线程和子线程,主线程主要...

  • 19. 线程池

    Android 中的线程池就是 java 中的线程池,即 ThreadPoolExecutor 类。 Java 通...

  • 线程池创建和相关知识

    线程池创建(单例):Android线程池得要这么用 - 简书 线程池相关知识:Android开发之线程池使用总结 ...

  • Android中的线程池

    为什么要使用线程池?Android 中的线程池有哪些?它们的区别是什么? 一、线程池的作用 重用线程池中的线程,可...

网友评论

      本文标题:Android 中的线程和线程池

      本文链接:https://www.haomeiwen.com/subject/orkfdttx.html