美文网首页
Android中采用线程池进行线程的管理

Android中采用线程池进行线程的管理

作者: 暮染1 | 来源:发表于2017-08-03 14:31 被阅读52次

    当遇到耗时操作,比如网络请求,频繁更新UI界面,这时就需要开启子线程,至于为什么开启子线程,无非防止阻塞UI线程,也就是主线程,防止造成ANR,也就是应用程序无响应。大家可能会觉得很简单,因为只要下面一句:

    new Thread(new Runnable() {
    @Override
    public void run() {
    }
    }).start();

    这样new Thread的弊端如下:

    1. 每次new Thread新建对象性能差。
    2. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。
    3. 缺乏更多功能,如定时执行、定期执行、线程中断。
      相比new Thread,Java提供的四种线程池的好处在于:
      a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。
      b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
      c. 提供定时执行、定期执行、单线程、并发数控制等功能。

    这时就需要Android的线程池机制来管理子线程。
    android的线程池与java线程池基本是一样的,Android通过Executors提供四种线程池,分别为:

    1. newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
    2. newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
    3. newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
    4. newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

    相关文章

      网友评论

          本文标题:Android中采用线程池进行线程的管理

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