成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術文章
文章詳情頁

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

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

synchronized關鍵字,一般稱之為”同步鎖“,用它來修飾需要同步的方法和需要同步代碼塊,默認是當前對象作為鎖的對象。

同步鎖鎖的是同一個對象,如果對象發生改變,則鎖會不生效。

鎖失敗的代碼:

public class IntegerSynTest { //線程實現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對象是被重寫;空引用的哈希代碼為零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(); } } }}

鎖失敗的運行結果:

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

鎖失敗的原因:

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

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

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

這時發現,它是重新 new出一個新的Integer,這樣的話,每 ++一次,那么就會產生一個新的對象,而Synchronize鎖是鎖同一個對象,當鎖不同對象時,則會鎖失敗。

解決方法:

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

鎖成功的代碼

public class IntegerSynTest { //線程實現Runnable接口 private static class Worker implements Runnable{ private Integer num; /** * ---重點看這里--- * 聲明要鎖的對象 * ---重點看這里--- */ private Object object = new Object(); public Worker(Integer num){ this.num=num; } @Override public void run() { //修改鎖對象 synchronized (num){Thread thread = Thread.currentThread();//System.identityHashCode:返回原生的hashCode值,不管Object對象是被重寫;空引用的哈希代碼為零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(); } } }}

鎖成功的運行結果:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲天堂在线观看视频 | 欧美日韩成人午夜免费 | 欧美日韩亚洲v在线观看 | 国产成人性色视频 | 九九九国产 | 国产91精品一区二区 | 亚洲天堂男人的天堂 | 亚洲精品久久久久综合中文字幕 | 久久久久免费 | 久久久久性 | 一区二区三区视频免费 | 九月婷婷亚洲综合在线 | 欧美国产日韩在线观看 | 久久99精品久久久久久三级 | 亚洲国产成人久久综合一区 | 国产女王丨vk| 亚洲一区免费 | 国产精品成久久久久三级 | 欧美一级视频免费 | 亚洲成人看片 | 9999久久| 能在线观看的一区二区三区 | 色老头久久网 | 91国语对白 | 一级一片免费看 | 国产在线精品香蕉综合网一区 | 久久国内精品自在自线软件 | 国产在线乱子伦一区二区 | 又粗又爽又色男女乱淫播放男女 | 九一精品国产 | 欧美一级毛片免费看高清 | 欧美日韩在线视频播放 | 亚洲视频在线网 | 日韩一级片视频 | 国产超清在线观看 | 一级做a爰片欧美一区 | 老司机亚洲精品影院在线 | 日韩精品欧美激情国产一区 | 国产一级大片 | 香蕉久久精品 | 综合558欧美成人永久网站 |