美文网首页
JAVA变量的线程安全

JAVA变量的线程安全

作者: 时之令 | 来源:发表于2018-07-20 15:03 被阅读0次

Java的内存模型JMM(Java Memory Model)规定了线程和内存之间的一些关系 JVM系统中存在一个主内存(Main Memory/ Java Heap Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成, 缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量的修改可能没有立刻写到主存中; 堆栈中保存的是线程的局部变量,线程之间无法相互直接访问堆栈中的变量。

所以说Java中的静态变量,实例变量,和局部变量在多线程环境下的安全问题就比较好理解了

  • 静态变量
    线程不安全
    静态变量即是整个类所拥有的变量,它不是被某一个实例所独占的,静态变量被分配在全局区,为所有对象共享一片内存,一旦被修改则全局可见。

  • 实例变量
    单例模式 线程不安全
    实例变量为对象变量私有,JVM中如果只存在一个对象实例,在多线程的环境下,一个线程对该变量做出修改,则对其他线程可见,故线程不安全
    非单例 线程安全
    如果每个线程在不同的对象中执行,则对象之间的修改是不可见 的,故线程安全

  • 局部变量 线程安全
    每个线程执行都会把局部变量 存放在自己的栈帧工作内存中,线程不共享,故线程安全。

相关文章

  • 58(5.3)

    53分钟。 线程和进程区别 Java的线程安全 什么是线程安全,如何保障。哪些变量是线程安全。 Java IO 分...

  • JAVA 多线程与高并发学习笔记(四)——ThreadLocal

    在 Java 多线程中,为了保证多个线程对变量的安全访问,可以将变量放到 ThreadLocal 类型的对象中,使...

  • JAVA

    1.4 Java的 内存模型 是否线程安全线程安全与cpu资源的抢夺 多线程在读写共享变量时引发的问题 线程的原子...

  • 内存模型

    1.4 Java的 内存模型 是否线程安全线程安全与cpu资源的抢夺多线程在读写共享变量时引发的问题 线程的原子性...

  • JAVA变量的线程安全

    Java的内存模型JMM(Java Memory Model)规定了线程和内存之间的一些关系 JVM系统中存在一个...

  • Java ThreadLocal类详解

    在Java的多线程并发执行过程中,为了保证多个线程对变量的安全访问,可以将变量放到ThreadLocal类型的对象...

  • JAVA 多线程与锁

    JAVA 多线程与锁 线程与线程池 线程安全可能出现的场景 共享变量资源多线程间的操作。 依赖时序的操作。 不同数...

  • (转)线程中哪些变量存在安全性问题

    转自Java多线程中static变量的使用 线程,是我们项目中绕不过的重点领域。提到线程,就常会听到线程安全的术语...

  • ThreadLocal

    定义:线程的局部变量;在多个线程中,分别有独立的值(副本)。特点:线程安全、无额外开销(快速)原理:java中用h...

  • 全面了解 Java 原子变量类

    ? 本文以及示例源码已归档在 javacore 一、原子变量类简介 为何需要原子变量类 保证线程安全是 Java ...

网友评论

      本文标题:JAVA变量的线程安全

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