|
|
@ -142,11 +142,13 @@ LinkedBlockingQueue 内部构成简单来说,可以分为三个部分:链表 |
|
|
|
|
|
|
|
|
|
|
|
LinkedBlockingQueue 主要用在线程池中,当我们使用 Executors 的 newFixedThreadPool 或 newSingleThreadPool 创建线程池时,阻塞队列用的就是 LinkedBlockingQueue,但是通常我们不建议这样直接使用 Executors 创建线程池,因为 LinkedBlockingQueue 的默认队列大小是 Integer.MAX_VALUE,可能会爆内存。 |
|
|
|
LinkedBlockingQueue 主要用在线程池中,当我们使用 Executors 的 newFixedThreadPool 或 newSingleThreadPool 创建线程池时,阻塞队列用的就是 LinkedBlockingQueue,但是通常我们不建议这样直接使用 Executors 创建线程池,因为 LinkedBlockingQueue 的默认队列大小是 Integer.MAX_VALUE,可能会爆内存。 |
|
|
|
|
|
|
|
|
|
|
|
在 Android 中,AsyncTask 在核心线程池不够用的情况下触发任务拒绝策略时,会用到 LinkedBlockingQueue。AsyncTask 它使用是一个单线程池, |
|
|
|
在 Android 中,AsyncTask 在核心线程池不够用的情况下触发任务拒绝策略时,会用到 LinkedBlockingQueue。 |
|
|
|
|
|
|
|
|
|
|
|
#### SynchronousQueue |
|
|
|
#### SynchronousQueue |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SynchronousQueue 是一个不存储元素的阻塞队列,每一个 put 操作必须等待 take 操作,否则不能添加元素。在使用 Executors 的 newCachedThreadPool 创建线程池用的就是它,在 AsyncTask 创建的一个单线程池用的也是它,核心线程数为 1,最大线程数为 20,非核心线程空闲存活时间为三秒,适合任务多但是执行比较快的场景中。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
源水太深了,还没看明白,待定。 |
|
|
|
|
|
|
|
|
|
|
|
#### SparseArray |
|
|
|
#### SparseArray |
|
|
|
|
|
|
|
|
|
|
|