为了账号安全,请及时绑定邮箱和手机立即绑定

细说Java多线程之内存可见性

难度中级
时长57分
学习人数
综合评分9.63
176人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.4 逻辑清晰
加了sync还是执行为0是因为线程的调度问题,线程不一定是按照书写顺序调度的,是由cpu决定的,所以第二个线程反而可能先执行。这个不属于交叉执行
非常赞通俗易懂的讲明白了
老师说的很好,谢谢老师!
加了synchronized还是会出现0的
讲的很牛X 兄弟

最新回答 / 慕婉清3156049
不会限制,被synchronized修饰的代码会被编译器或者处理器重排序。多个线程如果不加同步锁,重排序可能会导致可见性问题(线程A中代码顺序不一致可能导致线程B得到错误的结果,即使线程A符合as-if-serial语义),而如果加了同步锁,不会导致可见性问题,因为线程A的所有操作对于线程B来说都是可见的。synchronized的作用主要是两点:1.保证有序性:使多个线程之间有序执行,不会出现交叉执行。2.保证可见性:线程解锁前,必须把共享变量的最新值刷新到主内存中,线程加锁时,需要从主内存中重新读取最...
其实我们都在关注0和6 的结果,看到synchronized的时候我们的第一反应都是关注加入synchronized之后结果为6才对,但是其实这里本身并不满足同步,结果0和6应该都是对的。(如果不sleep的时候)这一章的标题也是synchronized实现可见性,换句话说应该是不出现3的结果才对。这是我的理解

最新回答 / anqilin
根据你这个代码应该是先执行了下边的读方法,你在写方法下面,sleep一段时间,应该可以解决这个问题
真的讲的非常棒,原先只知道怎么用,现在真的理解了 运行原理
感谢老师的讲解。我想提一点建议,我觉得这门课理论偏多,代码实践过少了。我理解起来没那么深入,更多的是停留在理论阶段。希望能多一点代码的实践分析。
首页上一页1234567下一页尾页
课程须知
学习本课程前,你需要熟练掌握Java的基础语法,熟悉Java多线程的基础知识,以及synchronized实现线程同步的方法。
老师告诉你能学到什么?
1、内存可见性 2、指令重排序 3、as-if-serial语义 4、synchronized实现可见性 5、volatile实现可见性

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消