欢迎来到天天文库
浏览记录
ID:59417332
大小:249.50 KB
页数:48页
时间:2020-09-19
《java内存模型与多线程技术ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、java内存模型与多线程技术yangjs@alibaba-inc.com主要内容和目的学习java多线程理论基础:JMM(java内存模型)学习java多线程技术基础:理解同步是如和工作分析程序什么时候需要同步澄清对volatile误解,正确使用TaskCancellationandThreadShutdown策略LazyinitializationSafety技术JMM(java内存模型)什么是Java内存模型Java内存模型相关概念java线程和内存交互行为定义Ordering&visibilityJMM相关java语言规
2、范内存模型操作平台的内存模型寄存器,CPU缓存,物理内存,虚拟内存…缓存一致性模型顺序一致性模型:要求对某处理机所写的值立即进行传播,在确保该值以被所有处理机接受后才能继续其他指令的执行释放一致性模型:允许将某处理机所写的值延迟到释放锁时进行传播Java内存模型(JMM)内存存管理的跨平台统一的模型write-once,run-anywhereconcurrentapplicationsinJava定义了Java线程和内存交互的规则通过一组语义规则来描述尤其是多线程之间共享内存的模式,保证多线程程序结果的可预测,语义一致性不同
3、于其他语言,同平台无关所有的实例变量,静态变量和数组元素都存放在堆内存里线程本地变量在堆栈中,不受JMM影响Java内存模型相关概念Threadworkingcopymemory在java规范中这是一个抽象的概念,对应可能会是寄存器,cpu缓存,编译及执行优化等。一个新产生的Thread有一个空的workingmemory。类似一个高速缓存线程之间无法相互直接访问,变量传递均需要通过主存完成Themainmemory就是我们所说的java堆内存Thread'sexecutionengine保证线程的正确执行顺序java线程和内
4、存交互行为定义JLS中对线程和主存互操作定义了6个行为,分别为load,save,read,write,assign和use,这些操作行为具有原子性,且相互依赖,有明确的调用先后顺序Auseaction(byathread)transfersthecontentsofthethread'sworkingcopyofavariabletothethread'sexecutionengine.Anassignaction(byathread)transfersavaluefromthethread'sexecutionengine
5、intothethread'sworkingcopyofavariable.Areadaction(bythemainmemory)transmitsthecontentsofthemastercopyofavariabletoathread'sworkingmemoryforusebyalaterloadoperation.Aloadaction(byathread)putsavaluetransmittedfrommainmemorybyareadactionintothethread'sworkingcopyofavar
6、iable.Astoreaction(byathread)transmitsthecontentsofthethread'sworkingcopyofavariabletomainmemoryforusebyalaterwriteoperation.Awriteaction(bythemainmemory)putsavaluetransmittedfromthethread'sworkingmemorybyastoreactionintothemastercopyofavariableinmainmemory.java线程和内
7、存交互分析例子分析:classSimple{inta=1,b=2;//Thread1executesvoidto(){a=3;b=4;}//Thread2executesvoidfro(){System.out.println("a="+a+",b="+b);}}类似计算机多级存储器结构,WorkingMemory类似Cache机制问题:变量a,b何时写会mainmemory?Ordering&visibility程序顺序:程序声明它们应当发生的顺序执行顺序:JMM不保证线程对变量操作发生的顺序和被其他线程看到的是同样的顺序。
8、JMM容许线程以写入变量时所不相同的次序把变量存入主存线程内部本身遵循程序顺序,从线程外看到的是执行顺序编译器和处理器可能会为了性能优化,进行重新排序程序执行为了优化也可能重新排序Ordering&visibility多线程场景分析classSimple{inta=1,b=2
此文档下载收益归作者所有