线程池的基本使用
线程池的基本使用
线程池的参数:
1 | public ThreadPoolExecutor(int corePoolSize,// 核心线程数 |
阻塞队列:
| 类名 | 说明 |
|---|---|
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删除数据。