美文网首页
成员变量,局部变量的线程安全

成员变量,局部变量的线程安全

作者: 屎倒淋头还嚼便 | 来源:发表于2019-06-14 13:01 被阅读0次

    JVM中的虚拟机栈是描述java方法执行的内存区域,他是线程私有的。
    每个方法从开始调用到执行完成的过程,就是栈帧从入栈到出栈的过程。在活动线程中,只有位于栈顶的帧才是有效的,称为当前栈帧。正在执行的方法称为当前方法,栈帧是方法运行的基本结构。

    多线程环境下,操作同一份数据(同一块内存空间),就有可能产生数据安全问题。

    成员变量:无论是基本数据类型,还是引用数据类型,数据都只有一份,所以多线程下可能不安全。解决安全问题:1、往每一个线程中都复制一份Threadlocal,2、加同步。java也有线程安全的已有类,如ConcurrentHashMap等等

    局部变量:由于局部变量定义在方法内部,而方法在Java栈中执行,Java栈是线程私有的。所以局部变量应该都是线程安全的。(无论是基本数据类型,还是引用数据类型,只要是局部变量都是安全的)

    注:方法在Java虚拟机栈中执行,而Java栈是线程私有的。
    就是每一个线程都有自己私有的Java栈内存空间,Java栈中执行方法,每一个方法就是一个栈帧。
    所以,定义在方法中的局部变量是线程安全的。
    而成员变量,多个线程都可以访问(访问这同一块内存空间),就可能产生数据安全问题。

    相关文章

      网友评论

          本文标题:成员变量,局部变量的线程安全

          本文链接:https://www.haomeiwen.com/subject/ljbufctx.html