【JVM】Java内存模型这块彻底玩儿明白了

作者: 寒食君分类: 计算机技术 发布时间: 2021-07-25 13:34:26 浏览:22873 次

【JVM】Java内存模型这块彻底玩儿明白了

凤雏阁下:
给up个建议,讲的时候可以用鼠标引导一下视线,要不听的很难跟上[奋斗]

小掏踢:
讲的真好,比什么什么教育课程视频好多了。

小陈同学丷丷:
volatile是因为内部做了内存屏障所以让程序运行到有volatile关键字修饰的变量操作时强制顺序执行,而不会出现指令重排序的情况,不知道我的理解对不对?

PS酷教程:
视频11:52处,只对线程t1使用synchronized关键字对1,2两句代码加锁。我觉得并不能保证线程安全问题,synchronized并不能保证里面的执行代码不被重排序,它在保证被保护的代码块里的操作的原子性(对其它试图拿this这把锁的线程互斥),所以在t1加锁的过程中,在t2(没有被加锁)看来仍然是无序的。假设t1先执行flag=true,又刚好写回主存(这个动作不确定,存在可能),而cpu切换到t2,又去往主存中读取t1(动作不确定,存在可能),那这样根本就不能保证线程安全,所以要加synchronized,两个地方都加上,才能满足先行发生原则的的锁规则。

三无往届毕业牲:
内存模型这块算是让你玩明白儿了[doge]

PS酷教程:
我觉得内存屏障只是jmm实现volatile语义的一种手段,根本目的还是在解决并发里的有序性,可见性的问题。有序性和可见性的底层实现过于复杂,不同操作系统,实现上又各有差异。所以jmm就使用happens-before原则向java程序员承诺,凡是满足此原则或根据此原则推导出来的原则的代码,那么jmm会保证前一个操作的结果将对后面的操作可见,而不管它里面到底是怎么重排序,或者是否存在可见性问题的。但是如果没有满足此原则的代码,那么代码在运行时,jmm将无法保证,前一个操作对后一个操作可见。而这个原则就是在写并发代码时必须遵守的原则。

超级无敌大鹏精:
视频质量太高了,值得反反复复多看几遍,加深印象

deku酱:
指令重排序那里讲错了吧,synchronized并不能禁止指令重排序,单例模式双重校验锁就能很好的说明,要不然也不用加一个volatile了。 up把有序性那里搞的有点混淆了,把有序性的指令重排序问题当成可见性问题了。 而且volatile禁止指令重排序的手段是内存屏障,并不是刷新主存。

奶唐每天超幸运:
讲的太好了,条理清晰全程干货,很难不三连

皮卡丘__official:
synchronized实现原子性可不可以理解为他可以将很多操作放到同步代码块中,这样这个代码块要么执行成功要么失败

木子今天学习了嘛:
[doge]是不是之前发了个一小时的完整版

是张学长啊:
我滴妈,全是干货,18分钟的视频不干快进,看了2个小时,才完全吃透!

我知道你都知道u:
up你好,想问一下为什么9分25秒的视频显示的代码,synchronized(this),如果这个Thread里面使用lambda生成的 Runnable,会报错是为什么

知识分享官 开发 学习 计算机 程序员 编程 经验分享 Java 学习心得 内存模型

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!