鎖對(duì)象lock是指對(duì)象所指向的內(nèi)存地址
第一條:當(dāng)一個(gè)線程訪問(wèn)某對(duì)象的synchronized方法或者synchronized代碼塊時(shí)解藻,其他線程對(duì)該對(duì)象的該synchronized方法或者synchronized代碼塊的訪問(wèn)將被阻塞老充。
第二條:當(dāng)一個(gè)線程訪問(wèn)某對(duì)象的synchronized方法或者synchronized代碼塊時(shí),其他線程仍然可以訪問(wèn)該對(duì)象的非同步代碼塊螟左。
第三條:當(dāng)一個(gè)線程訪問(wèn)某對(duì)象的synchronized方法或者synchronized代碼塊時(shí)啡浊,其他線程對(duì)該對(duì)象的其他的synchronized方法或者synchronized代碼塊的訪問(wèn)將被阻塞。
關(guān)于實(shí)例鎖和全局鎖有個(gè)很好的例子路狮。
pulbic class Something {
public synchronized void isSyncA(){}
public synchronized void isSyncB(){}
public static synchronized void cSyncA(){}
public static synchronized void cSyncB(){}
}
假設(shè)虫啥,類Something有兩個(gè)實(shí)例(對(duì)象)分別為x和y。分析下面4組表達(dá)式獲取鎖的情況奄妨。
(01) x.isSyncA()與x.isSyncB()//不能同時(shí)訪問(wèn)兩個(gè)都是用x當(dāng)做鎖
(02) x.isSyncA()與y.isSyncA()//可以同時(shí)訪問(wèn)涂籽,因?yàn)閮蓚€(gè)鎖不同
(03) x.cSyncA()與y.cSyncB()//不可以被同時(shí)訪問(wèn),他們使用的都是Something作為鎖
(04) x.isSyncA()與Something.cSyncA()//可以被同時(shí)訪問(wèn)
參考文章:
https://blog.csdn.net/wanliguodu/article/details/81005560