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

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

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

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

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

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

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

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

相关文章

  • 变量

    局部变量 、成员变量、全局变量 全局变量 线程不安全 public class GlobalVarManager ...

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

    JVM中的虚拟机栈是描述java方法执行的内存区域,他是线程私有的。每个方法从开始调用到执行完成的过程,就是栈帧从...

  • 线程安全和共享资源

    什么是线程安全可以被多线程同时执行的代码叫做线程安全的代码 共享资源局部变量局部对象的引用对象成员 所以,了解到某...

  • Servlet细节

    1、Servlet与线程安全 不要在servlet中创建成员,创建局部变量即可! 可以创建无状态成员! 可以创建有...

  • 【高并发】面试官问我:为什么局部变量是线程安全的?

    写在前面 相信很多小伙伴都知道局部变量是线程安全的,那你知道为什么局部变量是线程安全的吗? 前言 多个线程同时访问...

  • Java中的成员变量和局部变量

    成员变量,局部变量? 局部变量和成员变量的区别

  • Java笔记

    方法中的局部变量是肯定没有安全的问题的,除非你把局部变量用引用传值给多个子线程。 方法中的局部变量是属于每个线程栈...

  • No_16_0226 Java基础学习第七天

    [TOC] 成员变量与局部变量 成员变量与局部变量区别:A:在类中的位置不同成员变量:在类中,方法外局部变量:在方...

  • 记一次Java后端实习生面试(1)

    2018-5-18面试: 1.成员变量、静态变量和局部变量的区别; 成员变量和局部变量的区别 成员变量: ...

  • Java基础-面相对象篇

    类 成员变量和局部变量 成员变量:定义在类中 局部变量:定义在方法中 在没有赋值的情况下,局部变量会报错,但是成员...

网友评论

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

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