Java后端
·2025-04-01打卡,今天没学啥,
算法三道:1. 括号生成 2. 单词搜索 3. 分割回文串
今日八股文:
1、Java 线程池核心线程数在运行过程中能修改吗?如何修改?
允许修改,可以使用ThreadExcutor.CoreSize()指定核心线程数的大小。
指定大小不会打断当前任务,会在下一个任务提交时生效
一般遵循:
1. 等待队列过长时可以增加线程数。
2. 系统负载很小时可以减少线程节省资源。
3. 负载很大时候可以增加线程减少系统负载。
4. 增加线程时候要保证系统资源支持。
2、Java 中的 final 关键字是否能保证变量的可见性?
final修饰的数据是不能改变引用的,所以如果final修饰int long等基本数据类型时候,不能修改,而修饰list等引用类型时可以修改,虽然是同一个list,但是list中的值是可以改变的,所以final关键字只能保证引用可见,但是不能保证引用内部可见。
3、什么是 Java 中的原子性、可见性和有序性?
原子性:线程操作要么都成功要么都失败。实现:CAS、原子类、锁
可见性:线程修改数据后,其他线程可以马上观测到最新数据。实现:volatile、JMM、sychronised
有序性:程序实际运行顺序要和代码顺序一致。实现:volatile、内存屏障
4、为什么 Java 中的 ThreadLocal 对 key 的引用为弱引用?
主要是为了防止内存溢出或者是内存泄漏
每个线程都有一个ThreadLocalMap,key是ThreadLocal,value是对应的值,一个线程可以有多个ThreadLocal对象,当使用某个ThreadLocal对象时,此时的结果就是栈中的ThreadLocal引用和堆中的key都指向ThreadLocal对象,如果key指向ThreadLocal是强引用,那么当ThreadLocal不再被外部使用时,Thread Local引用销毁但是ThreadLocal不会被垃圾回收,造成内存泄漏。
使用弱引用就会被垃圾回收(ThreadLocal引用对ThreadLocal对象是强引用,所以如果还在使用是不会垃圾清理的)。
2
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
