synchronized 修飾 非靜態方法
當修飾非靜態方式時候,我們知道非靜態方式,是屬於對象的,那麼鎖住了對象,意味這個,這個對象在併發情況下,只能執行一個.
但是: 如果是多個對象的情況下,並不能有同步的作用
synchronized(this){
...
}
理解:
所以當用synchronized修飾的時候,是在當前對象上加鎖,僅會在當該對象要併發時候,會進行同步.對併發產生多個該對象並不同步
從性能優化方面講:
我們在用synchronized關鍵字的時候,能縮小代碼段的範圍就儘量縮小,能在代碼段上加同步就不要再整個方法上加同步。這叫減小鎖的粒度,使代碼更大程度的併發
synchronized 修飾靜態代碼的時候類似於下下面
synchronized(當前對象.class){
...
}
當修飾靜態方式時候,我們知道靜態方法是屬於字節碼,不屬於對象,所以根據此思路就明白,所以這個就是同步的代碼塊.
測試過程:
測試結果:
-------------測試同步對象方式:1-------------
測試同步對象方式1開始...
測試同步對象方式1開始...
測試同步對象方式1開始...
測試同步對象方式1結束...
測試同步對象方式1結束...
測試同步對象方式1結束...
-------------測試同步對象方式:2-------------
測試同步對象方式2開始...
測試同步對象方式2開始...
測試同步對象方式2開始...
測試同步對象方式2結束...
測試同步對象方式2結束...
測試同步對象方式2結束...
-------------測試同步代碼塊方式:1-------------
測試同步代碼塊方式1開始...
測試同步代碼塊方式1結束...
測試同步代碼塊方式1開始...
測試同步代碼塊方式1結束...
測試同步代碼塊方式1開始...
測試同步代碼塊方式1結束...
-------------測試同步代碼塊方式:2-------------
測試同步代碼塊方式2開始...
測試同步代碼塊方式2結束...
測試同步代碼塊方式2開始...
測試同步代碼塊方式2結束...
測試同步代碼塊方式2開始...
測試同步代碼塊方式2結束...
閱讀更多 東方既白 的文章