JAVA synchronized初體驗

先來看看synchronized這個關鍵字是什麼意思:

JAVA synchronized初體驗

同步,同步什麼?

要同步的就是這個關鍵字後面緊跟的花括號裡的代碼,也就是代碼塊。

為什麼要同步?

來看一個例子:

JAVA synchronized初體驗

這段代碼理論上最後輸出的i的值應該是20000,

但是本次運行之後的結果卻是17146,為什麼?

網上的相關說明有很多,總結一下就是一段線程代碼運行到一半,這時候線程調度器又跑去運行另外一個線程,導致線程內存中所做的修改沒來得及刷新到主內存,從而導致數據不一致。

這個時候,就輪到我們的主角登場了,synchronized關鍵字的作用就是鎖住某一個對象,當這個對象沒被解鎖之前,別的線程無法鎖住這個對象。

那麼,我們來嘗試一下:

這是修改之後的部分代碼:

JAVA synchronized初體驗

使用synchronized鎖住了Main1.class這個對象,這樣我們就能保證t1和t2能從頭到尾完整地運行一遍,不會出現之前那樣的情況。

無論運行多少遍,結果肯定為20000


分享到:


相關文章: