這篇文章帶給大家的內容是關於Java中synchronized關鍵字的用法介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
在並發程式設計中,synchronized關鍵字是常出現的角色。之前我們都稱呼synchronized關鍵字為重量鎖,但是在JDK1.6中對synchronized進行了優化,引入了偏向鎖、輕量鎖。本篇介紹synchronized關鍵字的使用方式,區別和偏向鎖、輕量鎖定和重量鎖定實現原理。
先看看synchronized關鍵字的4種用法。
1、修飾普通方法
#private synchronized void synMethod(){ }
這種用法中, synchronized鎖的物件實例。
2、修飾靜態方法
private static synchronized void synMethod(){ }
synchronized在這種情況下,鎖的是目前Class類別物件。
3、同步方法區塊
private void synMethod1(){ synchronized(this){ } } private void synMethod2(){ synchronized(ThreadTest.class){ } }
synMethod1中鎖定物件實例;synMethod2的是當前Class類別物件。
再介紹鎖定原理
在介紹鎖定原理之前,先認識Java物件頭Mark Word,以32位元為例。
已鎖定狀態 |
25 bit |
4bit |
#1bit |
2bit # |
||
|
23bit |
2bit |
#是否偏向鎖定 |
鎖定標誌位元 |
||
#輕量級鎖定 |
指向堆疊中鎖定記錄的指標 |
#0 |
||||
重量級鎖定 # |
指向互斥量(重量級鎖定)的指標 |
10 |
||||
GC標記 |
||||||
##11 |
#偏向鎖定 |
########線程######ID#####################Epoch##### #############物件分代年齡####### |
1 |
01 |
||
無鎖定 |
物件的hashCode |
##物件分代年齡 |
#0 |
01 |
以上是Java中synchronized關鍵字的用法介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!