面试 Java 并发编程八股文十问十答第十六期
相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
1)final 和可以保证可见性吗?
final 关键字可以确保在多线程环境下的一些可见性和内存一致性,但它不是一种通用的可见性保证机制。具体来说:
- 对于基本数据类型:
final可以确保在多线程环境下的可见性和不可变性。一旦一个final变量被赋予了初始值,其他线程在读取该变量时将会看到最新的值,而且该变量不可被修改。 - 对于引用类型:
final修饰的引用变量保证了引用的不可变性,即这个引用变量只能指向初始化时指定的对象,不能指向其他对象。但是,final并不保证引用对象的状态的不可变性,即被final修饰的引用指向的对象的状态仍然可以改变,因此如果引用的对象是可变的,其他线程在读取该引用指向的对象时仍然可能看到旧的状态。
综上所述,final 关键字可以确保可见性和不可变性,但仅限于被修饰的变量本身,而不涉及引用对象的状态。
2)为什么需要 ThreadLocal
ThreadLocal 是一个线程封闭的变量,在多线程环境下,每个线程都拥有自己独立的 ThreadLocal 变量副本,互不干扰。主要用途包括:
- 线程安全:通过
ThreadLocal可以避免多线程之间共享数据时的竞态条件和同步问题,每个线程都可以独立访问自己的ThreadLocal变量副本,不会被其他线程修改而影响。 - 避免参数传递:使用
ThreadLocal可以避免在方法间频繁传递参数,特别是那些需要在多个方法中使用的参数,将这些参数放在Thre

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



