线程池的基本使用

线程池的基本使用

线程池的参数:

1
2
3
4
5
6
7
public ThreadPoolExecutor(int corePoolSize,// 核心线程数
int maximumPoolSize,// 最大线程数
long keepAliveTime,// 超过核心线程数的其他线程存活时间
TimeUnit unit,// 超过核心线程数的其他线程存活时间单位
BlockingQueue<Runnable> workQueue,// 阻塞队列
ThreadFactory threadFactory,// 线程创建工厂
RejectedExecutionHandler handler) // 拒绝策略

阻塞队列:

类名 说明
ArrayBlockingQueue 初始化是设置queue的大小
LinkedBlockingQueue 链表实现的有界阻塞队列, 此队列的默认和最大长度为Integer.MAX_VALUE。此队列按照先进先出的原则对元素进行排序
SynchronousQueue 不存储元素的阻塞队列, 每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。
PriorityBlockingQueue 支持优先级排序的无界阻塞队列, 默认情况下元素采取自然顺序升序排列。也可以自定义类实现 compareTo()方法来指定元素排序规则,或者初始化 PriorityBlockingQueue 时,指定构造参数 Comparator 来对元素进行排序。
DelayQueue 优先级队列实现的无界阻塞队列
LinkedTransferQueue 链表实现的无界阻塞队列
LinkedBlockingDeque 链表实现的双向阻塞队列

阻塞队列的操作:

增加:
API 说明
add 往Queue里添加数据,如果队列满了,抛出异常
offer 往Queue里添加数据,添加成功return true,添加失败return false
enqueue(不能直接使用) 添加数据的具体操作,添加完成会signal()唤醒阻塞点线程
put 添加数据,阻塞式添加。
取出:
API 说明
take 阻塞式取值
dequeue(不可直接使用) 取值核心逻辑
poll 非阻塞时取值
删除:

remove删除数据。