成员变量,线程共享
以基本数据类型或引用数据类型为成员变量,变量值都是在堆中存放的。
局部变量,线程私有
- 基本数据类型,参数和参数值在Java虚拟机栈中存放的。
- 引用数据类型,参数在Java虚拟机栈中存放的,参数值是对象实例,在堆中存放的。
顺便解释下,多线程环境下为什么会产生数据安全问题?
局部变量是线程私有,所以不会产生数据安全问题。成员变量是在堆中存放的,线程共享的,有数据安全问题。
从Java内存模型角度来看,线程有本地的工作内存,里面存放的是从主内存中拷贝来的变量副本,变量修改后,会先写入到工作内存中,主内存中不会马上更改,这是造成数据安全问题的主要原因。
本文深入探讨了Java内存模型中局部变量与成员变量的区别,分析了线程共享成员变量时可能产生的数据安全问题,以及从Java内存模型角度解释了数据不一致的根本原因。
2283

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



