Java
开始重点持续更新的专栏,汇总代码见:https://github.com/Joy917/JavaCases
Joy_917
一个被修电脑耽误的民谣厨子
展开
-
volatile 的那点小事儿
先简单回忆下基础知识,Java 中内存模型的三大特性:原子、有序、可见:原子性:即一个操作要么成功,要么失败,没有第三种状态有序性:编译器和处理器在执行代码的时候,会将没有强依赖的多个指令进行重新排序,来提高执行效率,比如耗时长的放前面,趁机做些别的小操作等等可见性:线程从内存中访问变量,是先将变量从主内存拷贝到线程的工作内存中(高速缓存或者寄存器),再进行操作。那么在多线程场景下,就有可能出现线程A刚拷贝了个变量,线程B就将主内存的变量更新了,而此时线程A的变量就不是最新的了,这就是不可见vo原创 2021-08-28 23:03:50 · 120 阅读 · 0 评论 -
ThreadLocal 就一定线程安全吗
首先,线程安全主要针对并发情况来说的,在多线程环境下,ThreadLocal 可以提供给各自线程私有的局部变量,使线程间互不影响。当然,也有例外,比如下面这个栗子:/** * @Author Joy * @Date 2021/8/27 * @Desc ThreadLocal 作用的是同一个对象时,线程不安全,无法隔离 */public class ThreadLocal_Unsafe { private static SingleA singleA = new SingleA();.原创 2021-08-28 00:51:45 · 2502 阅读 · 0 评论