其實我們都在關注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