发布于2021-05-29 21:23 阅读(1448) 评论(0) 点赞(8) 收藏(4)
前面对物理机解决并发的方案及其衍生问题进行了一个简单概述,对于JAVA程序来说,并发问题主要解决两个问题:线程通信和线程同步。在多线程为共同完成同一任务而并发执行时,各个线程之间可能存在着数据交互或操作同一份内存数据,并且在执行顺序上存在先后关系,这时我们就需要在多个线程之间加入协调通信机制,来保证程序有序正常执行。线程之间的通信机制主要包括两种:共享内存和消息传递,Java采用的就是共享内存模型。Java多个线程之间通过读-写内存中的“公共状态”来进行通信,这个过程是隐式进行,对程序员来说是完全透明无感知的。为了定义上述“公共状态”的访问规则,抽象出Java内存模型(JMM),JMM决定一个线程对公共状态(共享变量)的写入如何对另一个线程可见。这里的“公共状态”从JVM的角度看指的是线程共享的数据区变量,包括:实例字段、静态字段和构成数组的元素,不包括局部变量和方法参数等,因为它们是线程私有的。
JAVA内存模型规定了所有共享变量存储在“主内存”中,而每个线程还拥有自己的“工作内存”,线程的工作内存中保存了被当前线程使用到的主内存中共享变量的副本拷贝,线程对共享变量的操作都在工作内存中完成,不能直接独写主内存中的变量。同时,各线程直接也无法直接访问对方工作内存中的变量,线程之间变量值的传递需要通过主内存来完成。线程、工作内存、主内存三者之间的抽象关系如下图:
变量如何从主内存拷贝到线程的工作内存,以及如何从线程工作内存同步回主内存,JMM定义了如下8中操作来实现上述两个过程:
同时在Java内存模型中明确规定了要执行这些操作需要满足以下规则:
作者:码神
链接:http://www.javaheidong.com/blog/article/207498/7abfc43f8fb8996737ff/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!