亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解java 對(duì)象鎖與類(lèi)鎖

瀏覽:49日期:2022-08-25 14:31:49

一.什么是對(duì)象鎖

對(duì)象鎖也叫方法鎖,是針對(duì)一個(gè)對(duì)象實(shí)例的,它只在該對(duì)象的某個(gè)內(nèi)存位置聲明一個(gè)標(biāo)識(shí)該對(duì)象是否擁有鎖,所有它只會(huì)鎖住當(dāng)前的對(duì)象,而并不會(huì)對(duì)其他對(duì)象實(shí)例的鎖產(chǎn)生任何影響,不同對(duì)象訪問(wèn)同一個(gè)被synchronized修飾的方法的時(shí)候不會(huì)阻塞,例如:

public class MyObject { private synchronized void method1(){ try { System.out.println(Thread.currentThread().getName()); Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } } //synchronized修飾為同步方法,如果先調(diào)用method1,則4秒后才會(huì)調(diào)用method2 //如果不用synchronized修飾,則可以直接異步調(diào)用,沒(méi)有影響 private void method2(){ System.out.println(Thread.currentThread().getName()); }}

創(chuàng)建一個(gè)類(lèi),synchronized修飾普通方法,即為對(duì)象鎖,那么這個(gè)時(shí)候,多個(gè)線程訪問(wèn)同一個(gè)對(duì)象實(shí)例的這個(gè)方法時(shí),是會(huì)同步的,并且只有一個(gè)線程執(zhí)行完,另一個(gè)線程才會(huì)執(zhí)行:

public static void main(String[] args) { //創(chuàng)建一個(gè)對(duì)象 MyObject myObject=new MyObject(); Thread t1=new Thread (new Runnable() { @Override public void run() {myObject.method1(); } },'t1'); Thread t2=new Thread (new Runnable() { @Override public void run() {myObject.method1(); } },'t2'); t1.start(); t2.start();}

即,打印t14秒之后,t2才會(huì)打印,因?yàn)閮蓚€(gè)線程調(diào)用的是同一個(gè)對(duì)象實(shí)例的方法,即同一把鎖,所有會(huì)同步執(zhí)行而如果是不同對(duì)象實(shí)例的話(huà),則沒(méi)有影響,因?yàn)閮蓚€(gè)線程調(diào)用的是不同實(shí)例的鎖方法,即不是同一把鎖,沒(méi)有關(guān)系,所以會(huì)正常輸出,不會(huì)同步

public static void main(String[] args) { //創(chuàng)建兩個(gè)對(duì)象 MyObject myObject=new MyObject(); MyObject myObject01=new MyObject(); Thread t1=new Thread (new Runnable() { @Override public void run() {myObject.method1(); } },'t1'); Thread t2=new Thread (new Runnable() { @Override public void run() {myObject01.method1(); } },'t2'); t1.start(); t2.start(); }

二 對(duì)象鎖的幾種形式以及應(yīng)用案例

1 synchronized修飾普通方法屬于對(duì)象鎖,

詳解java 對(duì)象鎖與類(lèi)鎖

2 synchronized修飾的代碼塊傳入this也屬于對(duì)象鎖

應(yīng)用:減小鎖粒度,第二種形式就比較好,比如A線程調(diào)用一個(gè)同步方法需要很長(zhǎng)時(shí)間,那么B就要等待很長(zhǎng)時(shí)間,這個(gè)時(shí)候可以將必須同步的代碼使用synchronized代碼塊, 不需要同步的先執(zhí)行,節(jié)約資源

詳解java 對(duì)象鎖與類(lèi)鎖

三 類(lèi)鎖

類(lèi)鎖是鎖住整個(gè)類(lèi),當(dāng)有多個(gè)線程來(lái)聲明這個(gè)類(lèi)的對(duì)象時(shí)候?qū)?huì)被阻塞,直到擁有這個(gè)類(lèi)鎖的對(duì)象唄銷(xiāo)毀或者主動(dòng)釋放了類(lèi)鎖,這個(gè)時(shí)候在被阻塞的線程被挑選出一個(gè)占有該類(lèi)鎖,聲明該類(lèi)的對(duì)象。其他線程繼續(xù)被阻塞住

(上面百度的),即一句話(huà),不管多少個(gè)對(duì)象,多少個(gè)對(duì)象,共用一把多,且只有一把,不管怎么調(diào)用,都會(huì)同步

上面方法加static變類(lèi)鎖:

private static synchronized void method1(){ try { System.out.println(Thread.currentThread().getName()); Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } }

這個(gè)時(shí)候無(wú)論線程調(diào)用的是多少個(gè)對(duì)象實(shí)例的方法,都會(huì)同步

四 類(lèi)鎖形式

synchronized修飾靜態(tài)方法屬于類(lèi)鎖

詳解java 對(duì)象鎖與類(lèi)鎖

以上就是詳解java 對(duì)象鎖與類(lèi)鎖的詳細(xì)內(nèi)容,更多關(guān)于java對(duì)象鎖與類(lèi)鎖的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久一区不卡中文字幕 | 18到20岁女人毛片一区 | 久久中文字幕综合不卡一二区 | 精品成人免费播放国产片 | 久久综合久久美利坚合众国 | 成人性生免费视频 | 亚洲色图综合在线 | 午夜一级毛片不卡 | 亚洲欧美日韩国产精品久久 | 亚洲国产成人精品女人久久久 | 国产在线观看91精品2022 | 国产亚洲欧美日韩在线观看不卡 | 国产激情视频在线播放 | 高清国产精品久久久久 | 婷婷六月丁 | 欧美激情视频网址 | 青草免费观看 | 国产高清晰在线播放 | 在线观看国产一区亚洲bd | 精品国产91久久久久久久 | 中文字幕综合网 | 综合欧美日韩一区二区三区 | 香蕉久久视频 | 91亚洲精品丁香在线观看 | 国产亚洲区 | 亚洲国产精 | 国产尤物福利视频一区二区 | 婷婷色视频 | 真人一级毛片国产 | 精品综合久久久久久97超人 | 最刺激黄a大片老师 | 片在线观看免费观看视频 | 国产精品免费视频一区二区三区 | 国产精品毛片在线大全 | baoyu122.永久免费视频 | 国产91久久精品一区二区 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 91青青草视频在线观看 | 亚洲福利一区二区三区 | 香蕉免费高清完整 | 公么吃奶满足了我苏媚 |