java 线程池机制的原理是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 线程池机制的原理是啥?相关的知识,希望对你有一定的参考价值。
线程池属于对象池.所有对象池都具有一个非常重要的共性,就是为了最大程度复用对象.那么线程池的最重要的特征也就是最大程度利用线程.
首先,创建线程本身需要额外(相对于执行任务而必须的资源)的开销.
作业系统在每创建一个线程时,至少需要创建以下资源:
(1) 线程内核对象:用于对线程上下文的管理.
(2) 用户模式执行栈.
(3) 内核模式执行栈.
这些资源被线程占有后作业系统和用户都无法使用.
相反的过程,销毁线程需要回收资源,也需要一定开销.
其次,过多的线程将导致过度的切换.线程切换带来的性能更是不可估量.系统完成线程切换要经过以下过程:
(1) 从用户模式切换到内核模式.
(2) 将CPU寄存器的值保存到当前线程的内核对象中.
(3)打开一个自旋锁,根据调度策略决定下一个要执行的线程.释放自旋锁,如果要执行的线程不是同一进
程中的线程,还需要切换虚拟内存等进程环境.
(4) 将要执行的线程的内核对象的值写到CPU寄存器中.
(5) 切换到用户模式执行新线程的执行逻辑.
所以线程池的目的就是为了减少创建和切换线程的额外开销,利用已经的线程多次循环执行多个任务从而提
高系统的处理能力. 参考技术A 线程池属于对象池.所有对象池都具有一个非常重要的共性,就是为了最大程度复用对象.那么线程池的最
重要的特征也就是最大程度利用线程.
首先,创建线程本身需要额外(相对于执行任务而必须的资源)的开销.
作业系统在每创建一个线程时,至少需要创建以下资源:
(1) 线程内核对象:用于对线程上下文的管理.
(2) 用户模式执行栈.
(3) 内核模式执行栈.
这些资源被线程占有后作业系统和用户都无法使用.
相反的过程,销毁线程需要回收资源,也需要一定开销.
其次,过多的线程将导致过度的切换.线程切换带来的性能更是不可估量.系统完成线程切换要经过以下过程:
(1) 从用户模式切换到内核模式.
(2) 将CPU寄存器的值保存到当前线程的内核对象中.
(3)打开一个自旋锁,根据调度策略决定下一个要执行的线程.释放自旋锁,如果要执行的线程不是同一进
程中的线程,还需要切换虚拟内存等进程环境.
(4) 将要执行的线程的内核对象的值写到CPU寄存器中.
(5) 切换到用户模式执行新线程的执行逻辑.
所以线程池的目的就是为了减少创建和切换线程的额外开销,利用已经的线程多次循环执行多个任务从而提
高系统的处理能力. 参考技术B cpu时间片,通过切分cpu的调度时间,从而让每个线程都感觉自己在独占cpu一样,达到多线程编程目的本回答被提问者采纳
蚂蚁三面面经(java开发岗):Java锁机制+JVM+线程池+事务+中间件
蚂蚁金服专场
01
—
蚂蚁金服一面
1、HaspMap底层原理?HaspTable和ConcurrentHashMap他们之间的相同点和不同点?
2、由上题提到锁的问题
3、MySQL的表锁&行锁&乐观锁&悲观锁,各自的使用场景
4、Java线程锁有哪些,各自的优劣势
5、事务四大特性
6、事务的二段提交机制?
7、聚簇索引&非聚簇索引
8、G1回收器讲下回收过程
9、Tcp三次握手,四次挥手大概讲一下?
10、类加载过程
11、双亲委派机制及使用原因
12、JVM GC算法有哪些,目前的JDK版本采用什么回收算法
13、Http&Https的区别
14、Https的加密方式
15、线程池的核心参数和基本原理
16、线程池的调优策略
17、问问题(你有什么职业规划)
02
—
蚂蚁金服二面
1、 java 什么时候发生死锁
2、如何避免死锁
3、 B+ 树的原理
4、分布式一致性协议,二段、三段、TCC,优缺点
5、分布式架构与微服务的关系
6、DNS解析过程
7、线程池实现过没?
8、Spring IOC、AOP
9、SpringBoot、SpringCloud的一些应用
10、ACID CAP BASE理论,以及RPC过程。
11、问问题(你有什么职业规划)没错,每个面试官都要问这个问题,三面也是
03
—
蚂蚁金服三面(P9面试)
1、项目中用的中间件的理解(Dubbo、MQ、Redis、kafka、zookeep)
2、参与过类似秒杀的项目?你认为这样的项目挑战在哪里,怎么解决
3、项目中遇到的最大问题和解决策略
4、生活中遇到的最大的挫折
5、生活中遇到的最大的令你最有成就感的事情
6、问问题(你有什么职业规划)
-end-
以上是关于java 线程池机制的原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Java 并发编程线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
Java 并发编程线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )