「Android 学习计划」之线程池

2018-05-24  本文已影响46人  13kmsteady

前言

由于 Android 系统不能在 UI 线程进行耗时的操作,通常我们会在子线程处理耗时操作。简单的写法就是就是 new Thread.start() 去执行耗时操作,但是频繁的创建线程势必会带来性能上的开销,接下来引入今天的主题:线程池

首先来谈下线程池的优点:

  1. 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销。

  2. 能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象。

  3. 能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。

执行者 ThreadPoolExecutor

Java 中线程池的真正实现为 ThreadPoolExecutor,该类的构造方法提供了一些列参数,可以配置不同的线程池。

 public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory)

ThreadPoolExecutor 执行流程

  1. 首先线程池会判断核心线程是否已满?

    是:进入下个流程

    否:创建一个核心线程执行任务

  2. 判断任务队列是否已满?

    是:进入下个流程

    否:将任务加入任务队列,等候执行

  3. 判断线程数量是否到达最大线程数?

    是:执行饱和策略

    否:创建非核心线程执行任务

线程池执行流程.png

Android 中常见的线程池

上一篇下一篇

猜你喜欢

热点阅读