
Synchronized關鍵字可以用來修飾方法或者代碼塊,對于同步方法,JVM 采用 ACC_SYNCHRONIZED 標記符來實作同步, 對于同步代碼塊,JVM 采用 monitorenter、monitorexit 兩個指令來實作同步,
在JDK1.6之后對對synchronized鎖進行了升級,在1.6之前synchronized直接加重量級鎖,但是1.6之后對其性能進行了優化,采用鎖升級的機制:偏向鎖->自旋鎖(輕量級鎖)->重量級鎖,
初次執行到synchronized代碼塊的時候,鎖物件變成偏向鎖,執行緒執行并不會主動釋放鎖,第二次到達代碼塊的時候,執行緒會判斷之前的執行緒是不是自己,如果是自己的話,由于前面沒有釋放鎖的操作,這里也就不用重新加鎖,就沒有加鎖、解鎖的開銷了,
當第二個執行緒過來,兩個執行緒產生了競爭,就會從偏向鎖升級成自旋鎖,自旋鎖競爭狀態中,沒有獲得鎖的執行緒,就會不斷自旋判斷自己是否拿到了鎖,沒有拿到鎖就會忙等,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/163622.html
標籤:Java
上一篇:SQL--多表查詢(mysql)
下一篇:SQL--事務
