阻塞队列(BlockQueue)
- 非阻塞方法
-
add
往满的队列中添加元素会报错 -
remove
从空的队列中移除元素会报错 -
offer
往满的队列中添加元素会返回false -
poll
从空的队列中移除元素会返回null
-
- 阻塞方法
put
take
使用场景:
阻塞队列通常使用在生产者消费者设计模式当中,生产者不用关心生成的产品由哪个消费者来执行,只需将生产的产品放入队列中,消费者直接从队列中取出产品使用,达到了生产者与消费者之间解耦的目的和性能均衡问题.
常用的阻塞队列有哪些?
- ArrayBlockQueue 一个由数组结构组成的有界阻塞队列
- LinkedBlockQueue 一个由链表结构组成的有界阻塞队列
- PriorityBlockQueue 一个支持优先级排序的无界阻塞队列
- DelayQueue 一个使用优先级排序的无界阻塞队列
- SyschronizedQueue 一个不存储元素的阻塞队列
- LinkedTransferQueue 一个由链表结构组成的无界阻塞队列
- LinkedBlockQueue 一个由链表结构组成的双向阻塞队列
什么是线程池
?为什么要用线程池
?
线程池是用来管理线程的.
因为线程的创建、执行和销毁都是需要耗费时间和资源的,所以通过线程池来避免线程的重复创建和销毁
线程池ThreadPoolExecutor
(/ɪɡˈzekjətər/)工作机制
-
线程池的创建 (各个参数的含义)
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
-
提交任务
-
execute(Runnable)
没有返回值 -
submit(Callable/Runnable)
有返回值,返回Future
,最终还是交给execute
去执行的
-
-
线程池的关闭
-
showDown
将正在执行的线程以外的线程关闭 -
showDownNow
将正在执行的线程和以外的线程都关闭
-
线程池中参数的含义文章来源:https://www.toymoban.com/news/detail-442584.html
-
corePoolSize
核心线程数,当前可执行线程的数量 -
maximumPoolSize
最大线程数,当阻塞队列存满后,将会创建新的线程来执行任务(执行的任务是当前的任务,而非阻塞队列中的任务) -
keepAliveTime
控制空闲线程存活时间 -
unit
控制空闲线程存活时间单位(ms、s) -
workQueue
阻塞队列,如果要执行的线程数超过核心线程数,将会会放在阻塞队列中,阻塞队列存满后,依据最大线程数将会创建新的线程来执行任务 -
threadFactory
对创建线程做一些调节 -
handler
拒绝策略,超出线程池执行能力以外的任务拒绝执行,最多可以执行1100个线程,超过的不予执行
RejectedExecutionHandler(拒绝策略)文章来源地址https://www.toymoban.com/news/detail-442584.html
- CallerRunsPolicy
-
AbortHandler
通常默认的拒绝策略是这一个,直接抛出异常 - DiscardPolicy
- DiscardOldestPolicy
到了这里,关于10.阻塞队列和线程池的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!