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

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

Java Synchronized鎖失敗案例及解決方案

瀏覽:2日期:2022-09-02 10:48:57

synchronized關(guān)鍵字,一般稱之為”同步鎖“,用它來修飾需要同步的方法和需要同步代碼塊,默認(rèn)是當(dāng)前對(duì)象作為鎖的對(duì)象。

同步鎖鎖的是同一個(gè)對(duì)象,如果對(duì)象發(fā)生改變,則鎖會(huì)不生效。

鎖失敗的代碼:

public class IntegerSynTest { //線程實(shí)現(xiàn)Runnable接口 private static class Worker implements Runnable{ private Integer num; public Worker(Integer num){ this.num=num; } @Override public void run() { synchronized (num){Thread thread = Thread.currentThread();//System.identityHashCode:返回原生的hashCode值,不管Object對(duì)象是被重寫;空引用的哈希代碼為零System.out.println(thread.getName()+'--@:---'+System.identityHashCode(num));num++;System.out.println(thread.getName()+'------num:'+num+'---'+System.identityHashCode(num));try { Thread.sleep(1000);} catch (InterruptedException e) { e.printStackTrace();}System.out.println(thread.getName()+'------num:'+num+'---'+System.identityHashCode(num)); } } public static void main(String[] args) { Worker worker = new Worker(1); for (int i = 0; i < 5; i++) {new Thread(worker).start(); } } }}

鎖失敗的運(yùn)行結(jié)果:

Java Synchronized鎖失敗案例及解決方案

鎖失敗的原因:

1.num++的.class實(shí)現(xiàn)是這樣的Integer integer1 = this.num, integer2 = this.num = Integer.valueOf(this.num.intValue() + 1);

2.查看 Integer.valueOf()的源代碼

Java Synchronized鎖失敗案例及解決方案

這時(shí)發(fā)現(xiàn),它是重新 new出一個(gè)新的Integer,這樣的話,每 ++一次,那么就會(huì)產(chǎn)生一個(gè)新的對(duì)象,而Synchronize鎖是鎖同一個(gè)對(duì)象,當(dāng)鎖不同對(duì)象時(shí),則會(huì)鎖失敗。

解決方法:

Synchronized同步鎖只要鎖的對(duì)象不發(fā)生改變即可,那么由此只需要聲明一個(gè)對(duì)象,不修改它,鎖這一個(gè)對(duì)象即可(還有其他方法暫不一一列舉,以后也不會(huì)列舉了)。

鎖成功的代碼

public class IntegerSynTest { //線程實(shí)現(xiàn)Runnable接口 private static class Worker implements Runnable{ private Integer num; /** * ---重點(diǎn)看這里--- * 聲明要鎖的對(duì)象 * ---重點(diǎn)看這里--- */ private Object object = new Object(); public Worker(Integer num){ this.num=num; } @Override public void run() { //修改鎖對(duì)象 synchronized (num){Thread thread = Thread.currentThread();//System.identityHashCode:返回原生的hashCode值,不管Object對(duì)象是被重寫;空引用的哈希代碼為零System.out.println(thread.getName()+'--@:---'+System.identityHashCode(num));num++;System.out.println(thread.getName()+'------num:'+num+'---'+System.identityHashCode(num));try { Thread.sleep(1000);} catch (InterruptedException e) { e.printStackTrace();}System.out.println(thread.getName()+'------num:'+num+'---'+System.identityHashCode(num)); } } public static void main(String[] args) { Worker worker = new Worker(1); for (int i = 0; i < 5; i++) {new Thread(worker).start(); } } }}

鎖成功的運(yùn)行結(jié)果:

Java Synchronized鎖失敗案例及解決方案

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久中文字幕制服丝袜美腿 | 91精品国产调教在线观看 | 国产午夜视频在线观看 | 亚洲情se | 日韩一区二区免费看 | 国产中文字幕久久 | 久久久999久久久精品 | 在线观看国产欧美 | 欧美色图自拍 | 激情五月黄色 | 日韩午夜高清福利片在线观看 | 黄网站色在线视频免费观看 | 青娱乐激情视频 | 美美女高清毛片视频黄的一免费 | 尤物网站在线观看 | kk4kk免费毛片| 国产女人的一级毛片视频 | 九九99久久精品影视 | 免费观看很黄很色的大片 | 国产特级毛片aaaaaaa高清 | 亚色图 | 亚洲一区二区色 | 精品国精品自拍自在线 | 黑人尻逼 | 亚洲美女自拍视频 | 久久精品国产国产精品四凭 | 久草视频国产 | 国产第一页在线视频 | 黄色一级在线观看 | 国产又色又爽免费视频 | 91久久国产露脸精品 | 久久精品福利视频 | 国产综合精品一区二区 | 亚洲人6666成人观看 | 毛片a级三毛片免费播放 | 中文字幕日产乱码偷在线 | 午夜在线观看视频免费 成人 | 成人在线网 | 欧美日韩成人在线观看 | 欧美日韩视频二区三区 | 日韩成人中文字幕 |