最新JAVA技术内存模型

最新JAVA技术内存模型

ID:37113572

大小:336.64 KB

页数:39页

时间:2019-05-17

最新JAVA技术内存模型_第1页
最新JAVA技术内存模型_第2页
最新JAVA技术内存模型_第3页
最新JAVA技术内存模型_第4页
最新JAVA技术内存模型_第5页
资源描述:

《最新JAVA技术内存模型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、最新Java™技术内存模型java.sun.com/javaone/sfJeremyManson和WilliamPugh马里兰大学http://www.cs.umd.edu/~pugh1

2、2004JavaOneSMConference

3、SessionTS-2331听众•假设你熟悉基于Java™技术的线程(“Java™线程”)的基础知识─创建、启动和加入线程─同步─wait和notifyAll2

4、2004JavaOneSMConference

5、SessionTS-2331Java™线程规范•修订为JSR-133的一部分•属于以下规

6、范中的一部分─最新Java™语言规范─最新虚拟机规范•今天在此讨论是JDK™1.5版本中的功能─不是所有这些功能都能保证在以前版本中运行─突破以前的线程规范─禁止许多Java™虚拟机执行优化3

7、2004JavaOneSMConference

8、SessionTS-2331多线程系统中的安全问题•不要保留许多直觉假设•某些广泛使用的习惯用法并不安全─最初的双重检查锁定用法─检查用于线程结束的non-volatile标志•不能使用测试来检查错误─有些异常情况仅在某些平台上出现─例如,多处理器─异常情况很少并且不重复地出现4

9、2004J

10、avaOneSMConference

11、SessionTS-2331修订线程规范•Java™线程规范已历经重大修订─多数修订是为适当地规范现有行为─但行为方面有少数更改•目标─清晰并且易于理解─培植可靠的多线程代码─可供高性能的Java™虚拟机使用•已影响Java™虚拟机─以及已编写出的较差的现有代码─包括Sun的JDK部分5

12、2004JavaOneSMConference

13、SessionTS-2331本次演讲……•用Java™语言描述构建同步阻塞和并发程序─语言原语和util.concurrent抽象•说明正确同步化代码的意义•

14、尽力使你确信,关于不同步代码的智能推断几乎肯定可以是错误的─高效和可靠的程序不需要6

15、2004JavaOneSMConference

16、SessionTS-2331本次演讲……•我们将主要讨论─同步方法和阻塞─Volatile域•同一原则适用于JSR-166锁定和原子性操作•还将讨论final域和不可变性7

17、2004JavaOneSMConference

18、SessionTS-2331分类学•高级并发抽象─JSR-166和java.util.concurrent•低级锁定─synchronized()阻塞•低级原语─Volatile

19、变量,java.util.concurrent.atomic类─考虑非阻塞同步•数据争用:故意不完全同步─避免!─甚至DougLea也不能正确了解8

20、2004JavaOneSMConference

21、SessionTS-2331同步的三个方面•原子性─锁定以获得互斥•可见性─确保一个线程中对象域的更改在其它线程中可见•顺序性─确保对语句执行的顺序不会感到惊奇9

22、2004JavaOneSMConference

23、SessionTS-2331不要试图太聪明•人们担心同步的成本─尝试不使用同步,设计模式在线程之间进行通信─锁定、volat

24、ile或其它并发抽象•几乎不可能正确执行─无同步的线程内通信是不直观的10

25、2004JavaOneSMConference

26、SessionTS-2331测验时间x=y=0启动线程线程1线程2x=1y=1j=yi=x能得到i=0和j=0这样的结果么?11

27、2004JavaOneSMConference

28、SessionTS-2331答案:是!x=y=0启动线程线程1线程2x=1y=1j=yi=x如何得到i=0和j=0?12

29、2004JavaOneSMConference

30、SessionTS-2331这是如何发生的?•编译器可以对语句

31、重新排序─或者保持寄存器中的值•处理器可以对其重新排序•在多处理器中,值不能在全局存储器中同步•内存模型的设计旨在允许强力优化─包括尚未实现的优化•对性能有益─对有关不充分的同步代码的直觉不利13

32、2004JavaOneSMConference

33、SessionTS-2331正确性和优化•根据你认为系统必须按照的顺序而设计的巧妙代码在Java语言中几乎总是错误的•Dekker的算法(第一个正确锁定实现)要求此顺序─在Java语言中不能运行,使用提供的锁定•必须使用同步来加强可见性和顺序性─以及互斥─如果你正确使用同步,那么你不会看

34、到重新排序14

35、2004JavaOneSMConference

36、SessionTS-2331同步操作(近似)//blockuntilobtainlocksynchronized(anObject){//getmainmemoryvalueoffield1andf

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。