温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java线程池相关知识点有哪些

发布时间:2022-01-15 16:17:09 来源:亿速云 阅读:158 作者:iii 栏目:大数据

这篇文章主要讲解了“java线程池相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java线程池相关知识点有哪些”吧!

线程池的意义:

    线程是稀缺资源,它的创建与销毁是比较重且耗资原的操作。而java线程依赖于内核线程,创建线程需要进行操作系统状态切换,为了避免资源过度消耗需要设法重用线程执行多个任务。线程池就是一个线程缓存,负责对线程进行统一分配,调优与监控。

线程池的优势:

重用存在的线程,减少线程的创建,消亡的开销,提高性能

提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行

提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

线程池的创建方式一共有五种

java线程池相关知识点有哪些

java线程池相关知识点有哪些

FixedThreadPool和SingleThreadExecutor => 允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求,从而引起OOM异常

CachedThreadPool => 允许创建的线程数为Integer.MAX_VALUE,可能会创建大量的线程,从而引起OOM异常(内存溢出异常)

java线程池相关知识点有哪些

corePoolSize:核心线程数 maximumPoolSize:最大线程数 keepAliveTime:存活时间 unit:存活时间的单位 workQueue:类似于银行办理业务很忙的时候除了核心窗口
还要加一些临时窗口 3.4的接口都是对于临时窗口而言 handler:拒绝策略 所有的工作都满了的时候 这时候会产生拒绝策略 jdk自带了四种拒绝策略,也可以写自己的拒绝策略
1:抛弃队列 然后抛出异常 2:抛弃队列 不抛出异常 3:抛弃队列中的前几个任务 重复执行任务 4:调用者回退机制 让调用者自己搞

java线程池相关知识点有哪些

线城池执行流程:一开始只有两个核心线程在工作,这时候再来线程就放到工作队列中排队,如果工作队列也满了,就创建临时线程,如果临时线程也满足

不了的话,就执行拒绝策略。

线程池的五种状态:

Running:能接受新任务,以及处理已经添加的任务

Shutdown:不接受新任务,可以处理已经添加的任务

Stop:不接受新任务,不处理已经添加的任务,并且中断正在处理的任务

Tidying:所有的任务已经终止,ctl的任务数量为0(ctl负责记录线程池的运行状态与活动线程数)

Terminated:线程池彻底终止,则线程池转化为terminated状态

线程池都有哪几种工作队列

  1. ArrayBlockingQueue:底层是数组,有界队列,如果我们要使用生产者-消费者模式,这是非常好的选择。

  2. LinkedBlockingQueue:底层是链表,可以当做无界和有界队列来使用,所以大家不要以为它就是无界队列。

  3. SynchronousQueue:本身不带有空间来存储任何元素,使用上可以选择公平模式和非公平模式。

  4. PriorityBlockingQueue:无界队列,基于数组,数据结构为二叉堆,数组第一个也是树的根节点总是最小值。

举例 ArrayBlockingQueue 实现并发同步的原理:原理就是读操作和写操作都需要获取到 AQS 独占锁才能进行操作。如果队列为空,这个时候读操作的线程进入到读线程队列排队,等待写线程写入新的元素,然后唤醒读线程队列的第一个等待线程。如果队列已满,这个时候写操作的线程进入到写线程队列排队,等待读线程将队列元素移除腾出空间,然后唤醒写线程队列的第一个等待线程。

线程池的线程数量怎么确定

  1. 一般来说,如果是CPU密集型应用,则线程池大小设置为N+1。

  2. 一般来说,如果是IO密集型应用,则线程池大小设置为2N+1。

  3. 在IO优化中,线程等待时间所占比例越高,需要越多线程,线程CPU时间所占比例越高,需要越少线程。这样的估算公式可能更适合:最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

如何实现一个带优先级的线程池

利用priority参数,继承 ThreadPoolExecutor 使用 PriorityBlockingQueue 优先级队列。

感谢各位的阅读,以上就是“java线程池相关知识点有哪些”的内容了,经过本文的学习后,相信大家对java线程池相关知识点有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI