鱼鳞
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对象是强引用,所以如果还在使用是不会垃圾清理的)。
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP