volatile和synchronized 的最大區別就是 前者不能保證變量或者代碼操作的原子性,而后者可以。。。原子性:要么操作完全,要么不操作。即,要么操作為1要么為0。。而volatile可能值執行某項操作的一部分,比如 操作了0.6,這樣子,算什么事兒嘛,對吧。。所以,這個就是區別。。。
個人總結,如有錯誤,望批評指正。發私信
個人總結,如有錯誤,望批評指正。發私信
2015-08-30
因為線程的執行本身就是不確定的,加了synchronized關鍵字只能確?;コ庠L問這段代碼以及變量的可見性,即某線程在修改共享變量(通過自己的工作內存來修改)時,其他的所有線程無法獲得共享變量的信息。所以synchronized并不能保證程序的執行順序。所以即使加了synchronized也可能會出現0。順序是隨機的,看jVM內存以及CUP的調度了。
2015-08-30
樓下的話差矣。。多線程執行,可以說是很“亂”的,和不是按照你代碼寫的順序那樣子執行的。。一旦所有線程調用了start()后,那么就會出現
“不可控”的局面。。。ps:強烈要求慕課提供回復功能。
“不可控”的局面。。。ps:強烈要求慕課提供回復功能。
2015-08-30