synchronized自我理解

原子性:

    對數據操作是原子操作,即是獨一無二的,如果系統指令是一對一操作的話,那麼就不會有原子性問題,但是的代碼操作有的是多條指令進行的。

互斥性:

    進行數據操作的時候,不能運行其他線程進行讀和寫。

共享性:

    在多線程編程中,數據共享是不可避免的。最典型的場景是數據庫中的數據,爲了保證數據的一致性,我們通常需要共享同一個數據庫中數據

可見性:

    內存中數據的可見性。

有序性:

     編譯器和處理器可能會對指令做重排序

  1. 代碼塊的同步是通過 monitorenter 和 monitorexit 指令獲取線程的執行權
  2. 方法的同步是通過加 ACC_SYNCHRONIZED 標識實現線程的執行權的控制

偏向鎖(假定線程是不存在競爭的情況,用來優化synchronized的效率):

   

輕量級鎖(線程併發數並不是那麼高的情況下,啓用輕量級鎖,CAS方法該表對象裏指向線程的指針):

重量級鎖(線程併發數高的情況下,升級爲重量級鎖,直接進入阻塞態,不採用自選方式)::

 

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章