其实我们都在关注0和6 的结果,看到synchronized的时候我们的第一反应都是关注加入synchronized之后结果为6才对,但是其实这里本身并不满足同步,结果0和6应该都是对的。(如果不sleep的时候)这一章的标题也是synchronized实现可见性,换句话说应该是不出现3的结果才对。这是我的理解
2019-03-24
最赞回答 / iceWang
一个或某几个操作只能在一个线程执行完之后,另一个线程才能开始执行该操作,也就是说这些操作是不可分割的,线程不能在这些操作上交替执行文中的 i++ 包括 3 个操作读取 i 的值i 的值 +1 将 i 赋值给 i在这 3 个操作中可能会有其他线程开始执行,因此不是原子性的
2019-01-20
老师讲的是真好,给老师疯狂打call,特别是主内存 跟 工作内存的图,看完之后对synchronized的机制理解 加深了
2018-12-02
经验证 加了 synchronized 之后还是出现0。再仔细看了下代码,read()方法里的输出是在if 外面,只要是读方法先执行,ready = false;然后执行输出,reult = 0; 都是初始值。哈哈,例子没找好。
2018-11-20
已采纳回答 / 特南克斯
main 线程是会和 new 出来的线程并行执行的,如果没有那个 while 判断,下面这行代码<...code...>就会在其他线程执行完之前就执行了。加 while 判断,就是为了等五百个线程执行完毕
2018-10-14