没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
JAVA 知识
Java 线程/内存模型的缺陷
本文是由 JR 主持写作的?J2SE 进阶?一书的局部章节整理而成,?J2SE 进阶?正在
写作、完善阶段。您阅读后,有任何建议、批评,请和我联系,或在这儿留
言。?J2SE 进阶?写作工程组感谢您阅读
本文是由 JR 主持写作的?J2SE 进阶?一书的局部章节整理而成,?J2SE 进阶?正在
写作、完善阶段。您阅读后,有任何建议、批评,请和我联系,或在这儿留
言。?J2SE 进阶?写作工程组感谢您阅读本文。 资料个人收集整理,勿做商业用途
Java 在语言层次上实现了对线程的支持。它提供了
Thread/Runnable/ThreadGroup 等一系列封装的类和接口,让程序员可以高效的
开发 Java 多线程应用。为了实现同步,Java 提供了 synchronize 关键字以及
object 的 wait()/notify()机制,可是在简单易用 的背后,应藏着更为复杂的
玄机,很多问题就是由此而起。资料个人收集整理,勿做商业用途
一、Java 内存模型
在了解 Java 的同步秘密之前,先来看看 JMM(Java Memory Model)。
Java 被设计为跨平台的语言,在内存管理上,显然也要有一个统一的模型。而
且 Java 语言最大的特点就是废除了指针,把程序员从痛苦中解脱出来,不用再
考虑内存使用和管理方面的问题。
可惜世事总不尽如人意,虽然 JMM 设计上方便了程序员,但是它增加了虚拟机的
复杂程度,而且还导致某些编程技巧在 Java 语言中失效。资料个人收集整理,勿做商业用
途
JMM 主要是为了规定了线程和内存之间的一些关系。对 Java 程序员来说只需负
责用 synchronized 同步关键字,其它诸如与线程/内存之间进行数据交换 /同步
等繁琐工作均由虚拟机负责完成。如图 1 所示:根据 JMM 的设计,系统存在一个
主内存(MainMemory),Java 中所有变量都储存在主存中, 对于所有线程都是共
享的。每条线程都有自己的工作内存(WorkingMemory),工作内存中保存的是主
存中某些变量的拷贝,线程对所有变量的操作都 是在工作内存中进行,线程之
间无法相互直接访问,变量传递均需要通过主存完成。资料个人收集整理,勿做商业用途
图 1 Java 内存模型例如图
线程假设要 对某变量进行操作,必须经过一系列步骤:首先从主存复制/刷新数
据到工作内存,然后执行代码,进行引用/赋值操作,最后把变量内容写回
MainMemory。Java 语言标准(JLS)中对线程和主存互操作定义了 6 个行为,分别
为 load,save,read,write,assign 和 use,这些操作行为具有原子性,且相
互依赖,有明确的调用先后顺序。具体的描述请参见 JLS 第 17 章。资料个人收集整理,
勿做商业用途
资源评论
学习使人快乐张
- 粉丝: 68
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功