`
qifeifei
  • 浏览: 27730 次
  • 来自: 上海
社区版块
存档分类
最新评论

线程内存和主内存之间联系

阅读更多
1, java多线程共享主内存中变量的时候,一共会经过几个阶段, 

  lock:将主内存中的变量锁定,为一个线程所独占。

  unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。

  read:将主内存中的变量值读到工作内存当中。

  load:将read读取的值保存到工作内存中的变量副本中。

  use:将值传递给线程的代码执行引擎。

  assign:将执行引擎处理返回的值重新赋值给变量副本。

  store:将变量副本的值存储到主内存中。

  write:将store存储的值写入到主内存的共享变量当中。 

所以线程操作共享变量的时候,都不是直接操作主内存中的变量,而是先把主内存中的变量copy一个副本到线程自己的栈中,然后做修改,修改好了会再次更新到主内存中。这中间经过很多的步骤,虽然线程内变量副本和主内存中变量做同步的时候也是加了锁的,但这只是对变量的读和写锁,并不能保证外面的业务计算线程安全,就带来了多线程访问数据不一致的问题,那么就要解决线程安全问题。

 

 

1
1
分享到:
评论

相关推荐

    深度剖析java内存模型

    具体来说,JMM定义了线程和主内存之间的抽象关系,共享变量存储在主内存中,而每个线程都有自己的私有本地内存,其中包含该线程读写共享变量的副本。本地内存实际上是不存在的,它是一个抽象概念,涵盖了缓存、写...

    《深入理解JAVA内存模型》PDF

    从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。...

    动态调用DLL并与主程序通信,内存共享,线程安全

    本文将深入探讨如何动态调用DLL,如何实现主程序与DLL之间的通信,以及如何确保在内存共享和多线程环境下的线程安全性。 首先,让我们了解动态调用DLL的基本概念。与静态链接库不同,动态链接库在程序运行时而不是...

    JVM的基础和调优【JMM 内存结构 GC OOM 性能调优 ThreadLocal】

    JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中, 每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程读/写共享变量的副本 本地内存时JMM的一个抽象...

    深入理解Java内存模型

    Java内存模型定义了线程和主内存之间的抽象关系,即所有共享变量存储在主内存中,每个线程都有自己的本地内存,用于存储共享变量的副本。本地内存并不是真实存在的内存空间,而是一种抽象概念,它包括了CPU缓存、写...

    netty5多线程编程

    JMM定义了工作内存和主内存的概念,其中工作内存是指每个线程持有的内存区域,用于存储线程使用变量的拷贝。主内存则是指JVM内存的一部分,存储了所有线程共享的变量。线程间的数据交换必须通过主内存来完成,线程不...

    java内存模型详解

    7. **compareAndSwap**(CAS):原子性地比较并交换工作内存和主内存中的变量值。 8. **volatile read/write**:针对volatile变量的特殊读写操作,保证可见性和有序性。 此外,Java提供了`synchronized`关键字和`...

    Netty多线程并发编程

    Java内存模型主要分为两个部分:工作内存和主内存。工作内存是指CPU中的寄存器和高速缓存,而主内存是指计算机的RAM。 在多线程编程中,Java内存模型.play了非常重要的角色。Java内存模型规定了线程如何访问和操作...

    java经典多线程面试题

    这是通过在工作内存和主内存之间建立一个直接的通信通道来实现的。 8. Java中的ThreadLocal是什么? - ThreadLocal为每个使用该变量的线程提供一个独立的变量副本,每个线程都可以独立地改变自己的副本,而不会...

    内存屏障原理解析

    缓存结构中,数据是以缓存行(Cache Line)为单位在CPU的缓存和主内存之间进行传输。缓存行的大小通常是一个2的幂次的字节数,范围从16到256字节不等。当一个数据项首次被某个CPU访问时,整个缓存行的数据都会被加载...

    多线程并发编程在Netty中的应用分析

    为了保证线程之间的数据一致性,Java内存模型定义了一系列操作来控制主内存与工作内存之间的交互过程: 1. **lock**:将主内存中的变量标记为某个线程独占。 2. **unlock**:将被锁定的变量解锁,使其可以被其他...

    什么是Java内存模型.docx

    高速缓存位于CPU和主内存之间,能快速存储和检索数据,减轻主内存访问的压力。随着技术的发展,出现了多级缓存(如L1、L2、L3),使得CPU能更快地获取和存储数据。 然而,多级缓存和多线程环境带来了新的挑战。当多...

    并发编程基础底层原理学习(三).doc

    JMM将线程的本地内存和主内存抽象出来,本地内存保存了线程对共享变量的副本,而主内存则存储所有线程共享的变量。线程A和线程B之间的通信必须经过以下两个步骤:线程A首先将本地内存的更新写回主内存,然后线程B从...

    JAVA内存模型.docx

    内存屏障是JMM用来解决内存可见性问题的关键技术,它阻止特定的内存操作被重排序,确保数据在缓存和主内存之间的一致性。 3. JVM的指令重排序是性能优化的一种手段,允许编译器和处理器为了提高执行效率而改变代码...

    Java内存模型

    Java内存模型(Java Memory Model,...例如,通过使用synchronized或volatile,可以确保变量的修改在工作内存和主内存之间正确同步,确保所有线程都能看到最新的值,遵循先行发生排序的原则,从而保证程序的正确性。

    Java并发理论,如何理解线程安全.docx

    Java内存模型抽象地描述了处理器缓存和主内存之间的交互。每个线程都有自己的工作内存,从主内存拷贝共享变量,然后在工作内存中进行读写操作。更新后的共享变量必须适时写回主内存,以确保其他线程可以看到最新值。...

    深入理解java内存模型

    Java内存模型规定了程序中的各种变量(包括实例字段、静态字段和数组元素)如何在处理器缓存和主内存之间交互。在多线程环境中,JMM确保了共享变量的正确同步,避免了数据竞争和其他并发问题。以下是一些关键概念: ...

    JAVA-内存模型.docx

    JMM允许编译器和硬件在处理器缓存和主内存之间自由移动数据,但程序员可以通过`final`和`synchronized`关键字来控制变量的可见性和有序性。 **1. JMM简介** JSR133(Java Memory Model and Thread-safe ...

Global site tag (gtag.js) - Google Analytics