题目
- ThreadLocal的原理和使用场景
- ThreadLocal内存泄漏的原因,如何避免
- 什么是强引用,什么是弱引用
- 为什么用线程池?解释下线程参数?
- 线程池处理流程
- 线程池中阻塞队列的作用
- 为什么先添加队列而不是创建最大线程
- 线程池中线程复用原理
- spring是什么
个人理解
-
ThreadLocal的原理和使用场景
Theadlocal是Thread的局部变量,本质是局部的静态Map,key是当前的句柄,value是线程变量,使用场景有1.在进行对象跨层传递的时候,可以避免多次传递,打破层次间的约束。 2.线程间数据隔离。 3.进行事务操作,用于存储线程事务信息。4.数据库连接,session会话管理。 -
ThreadLocal内存泄漏的原因,如何避免
内存泄露是指不会再被使用的对象或变量占用的内存不能被回收。ThreadLocal中内存泄漏的原因是ThreadLocalMap中不存在外部强引用的时候,key会被回收,key就成了null,而value却还存在,由于ThreadLocalMap的生命周期和Thread一样长,没有手动删除key则会导致内存泄漏。 -
什么是强引用,什么是弱引用
强引用:使用new关键字创建的对象一般都是强引用,不会被垃圾回收器回收,当内存不足时,JVM会抛出Error使程序停止。若想取消引用与对象之间的关系,可以显式地将引用赋值为null。
弱引用:使用java.lang.ref.weakreference类来表示,JVM在进行垃圾回收的时候,无论内存是否充足,都会回收。 -
为什么用线程池?解释下线程参数?
1.降低资源消耗。2.提高相应速度。3.提高线程的可管理性
线程参数:1.corePoolSize(核心线程数)2.maxinumPoolSize(最大线程数)3.keepAliveTime,unit(超出超出核心线程数之外的线程的空闲存活时间)4.workQueue(用于存放待执行的任务)5.ThreadFactory(线程工厂,用来生产线程执行任务) 6.Handler(任务拒绝策略) -
线程池处理流程
-
线程池中阻塞队列的作用
一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保证当前的任务。阻塞队列可以保证任务队列中没有任务时,阻塞获取任务的线程,使得线程进入wait状态,释放cpu资源,阻塞队列还自带阻塞和唤醒的功能。 -
为什么先添加队列而不是创建最大线程
在创建新线程时,需要获取全局锁,这时候其他的线程就会阻塞,影响了整体的效率。 -
线程池中线程复用原理
在线程池中,同一个线程可以从阻塞队列中不断获取新任务来执行,核心原理在于每一个线程会执行一个循环任务,不断检查是否有任务需要被执行,如果有就掉用run方法执行。 -
spring是什么
spring是轻量级的开源的J2EE框架,是一个容器框架,用来封装JavaBean(Java对象),中间持久层起一个连接操作(整合框架,Mybatis等等)。
spring也是轻量级的IOC(控制反转)和AOP(面向切面)容器框架。
最后
明天还会更新的!
如果有理解不对的地方,欢迎指出。
谢谢