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

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

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

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

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

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

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

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

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

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

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

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

 

 

1
1
分享到:
评论

相关推荐

    Java内存模型案例讲解.docx

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

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

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

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

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

    Java内存模型总结(上)

    Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态...  从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一

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

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

    浅谈Java内存模型之happens-before

    于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?下面小编来简单介绍下

    回合制卡牌战斗游戏服务器架构和业务源码(跨平台,框架和主逻辑C++,登录支付php)

    1.回合制卡牌战斗服务器源码,底层库包含常用的工具类,线程库,网络库,数据库操作,主逻辑。 2.服务器架构分为登录支付的web服务器,gateway网关服务器,gameserver游戏逻辑服务器,game server连接mysql数据库,...

    Windows 系统错误代码简单分析

    可能是一个包含注册表数据文件的结构已损坏,也可能内存中该文件的系统映像已损坏,或者因为备份副本(或日志)不存在(或损坏)导致无法恢复该文件。  1016 由注册表引起的 I/O 操作发生了不可恢复的错误。...

    vfp6.0系统免费下载

    答案: 6.0 版中做了一些服务程序的改进,包括支持套件模型线程以使服务程序的比例范围更佳,并使其在 Active Server Page 和 Transaction Server 中的运行更平滑。类型库的改进使 Visual Basic 等应用程序可以在命令...

Global site tag (gtag.js) - Google Analytics