慕数据8406292
qq_慕慕粉
if(flag) 是 if(flag == true)的意思 所以flag = false的时候走的是else if(!flag) 就是 if (flag != true) 或者 if(flag == false)的意思
starkpan
加注释,多次编译,多次执行。
黄小白的烂漫Spring
嗯,,,
牙小木
单核没关系。多核有关系。多核由于java为了提升效率进行了指令重排,所以执行顺序会不同。
無無
呵呵,提问者没搞懂,大家不要被这个人带偏了,他才在误人子弟!估计提问者是想说内存可见了,怎么还会执行结果不一致呢?谁说过保证了内存可见性就保证执行结果是一致的??别人是内部线程类,视频里read()操作和write()操作加了synchronized是原子性的,但是又不保证read()和write()哪个先执行,所以会出现2个结果,如果是先read()执行,那么result就是0,如果write()先执行,那么result就是6。最后老师通过延时保证write()先执行,结果就是只有6。建议多学习,少抱怨,只是能力不足,不要说老师不行哈。
Hansonhy
你让write线程休眠一会。就会出现其他状况。因为代码短执行的太快,线程没有进行切换就已经执行完毕了,所以结果只有6.
乔治桑
单线程并且有数据依赖关系
快乐不假
1、main线程为主线程, 还有 写线程 和 读线程, 可简单理解为程序中总共有这3个线程(3个线程轮流执行, 主线程等待 写线程 和 读线程执行完毕 最后程序运行终止)
(主线程的任务或作用 就是 执行main 方法中的代码指令(即启动 写线程 和 读线程))
2、程序分析如下:
a、首先 主线程运行 , 启动了 写线程后 主线程进入休眠(此时 因为主线程休眠了,而 读线程还没有启动(需要主线程来启动)), 所以只有/仅有 写线程 获取CPU执行权, 因为写线程本身的任务简单,在主线程休眠的1秒时间内足够它执行完。。。当主线程苏醒后, 获取CPU执行权, 启动 读线程 , 读线程 紧接着执行读操作, 输出为 6 .
慕斯卡4106679
首先,你这休眠的是线程 main,并不会影响到synDemo读写线程的正常运行。而且就算你休眠的是synDemo的写线程,但只要它拿到了锁,那么读线程就会是堵塞状态,直到写线程释放了锁。
最好还是先看看书或关于线程的博文,对同步,锁有所了解,然后再来看此视频。
weibo_一场飘落_0
老师之所以这么做是让我们自己加上去分析以下结果。
慕圣4558451
设置断点不容易看出来效果的 给程序更多的反应时间 就不会出现那种重排序什么的额情况了呢
italycappuccino
出现0是因为读线程先得到了执行,读线程执行完,写线程才执行,这个我里面也有讲到,你稍微注意下,在“synchronized实现可见性(下)”的第03:30之后!另外,慕课网这点估计剪切的估计太快了,有点不太容易注意到,可以在写线程和读线程之间加个休眠操作,让写线程执行完,读线程在执行,也可以使用wait和notify来控制线程执行的顺序!