日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

淺析Java 并發編程中的synchronized

瀏覽:3日期:2022-08-20 09:14:41

synchronized關鍵字,我們一般稱之為“同步鎖”,用它來修飾需要同步的方法和需要同步代碼塊,默認是當前對象作為鎖的對象。在用synchronized修飾類時(或者修飾靜態方法),默認是當前類的Class對象作為鎖的對象,故存在著方法鎖、對象鎖、類鎖這樣的概念。

一、沒有設置線程同步的情況

先給出以下代碼感受下代碼執行的時候為什么需要同步?代碼可能比較枯燥,配上業務理解起來就會舒服很多,學生軍訓,有三列,每列5人,需要報數,每個線程負責每一列報數。

class SynchronizedExample {protected static int num = 0;protected void numberOff() {for(int i=0; i<5; i++) {num++;System.out.println(Thread.currentThread().getName()+':'+SynchronizedExample.num);}}}public class SynchronizedTest {public static void main(String[] args) throws InterruptedException {SynchronizedExample se = new SynchronizedExample();for(int i=1; i<=3; i++) {new Thread( ()-> {se.numberOff();}, '線程'+i).start();}}}

執行結果如下:

線程1:1線程2:2線程1:3線程3:4.......

之所以出現這種情況,是因為三個線程是異步的,沒有同步。對應的業務場景就是,在第一列沒有完成報數的時候,其他隊列搶報了,這在現實中是不允許的,所以需要類似于synchronized等具有同步功能的關鍵字粉末登場。

二、方法同步鎖

當報數方法加上synchronized關鍵字之后,就會一列一列的報數。

protected synchronized void numberOff() {for(int i=0; i<5; i++) {num++;System.out.println(Thread.currentThread().getName()+':'+SynchronizedExample.num);}}

執行結果如下:

線程1:1線程1:2線程1:3線程1:4......

寫到這里還是要從技術層面講下原理,當一個線程執行帶有synchronized關鍵字的方法時,該線程會在該方法處設置一個鎖(其他線程打不開這個鎖,只能在外邊等該線程釋放掉該鎖,一般都是執行完所有代碼后主動釋放鎖),表示此方法是當前線程獨占的,對應到上述業務中就是一次只能有一個隊列報數。

三、對象鎖

改進后的代碼用到了一個對象鎖,該對象鎖默認是當前對象,上述代碼等同于以下代碼:

protected void numberOff() {synchronized (this) {for (int i = 0; i < 5; i++) {num++;System.out.println(Thread.currentThread().getName() + ':' + SynchronizedExample.num);}}}

當多個線程用一個對象鎖,各個線程可以達到同步的作用,如果每個線程都用自己的對象鎖,那么synchronized就失去了同步的作用。如以下代碼:

class SynchronizedExample {protected static int num = 0;protected void numberOff() {synchronized (this) {for (int i = 0; i < 5; i++) {num++;System.out.println(Thread.currentThread().getName() + ':' + SynchronizedExample.num);}}}}public class SynchronizedTest {public static void main(String[] args) throws InterruptedException {SynchronizedExample se = new SynchronizedExample();for(int i=1; i<=3; i++) {new Thread( ()-> {new SynchronizedExample().numberOff();}, '隊列'+i).start();}}}

執行結果如下:

線程1:1線程2:2線程1:3線程3:4.......

有讀者會說不同線程執行的是不同對象中的方法,肯定達不到同步的效果,也對,也很有道理,接著看如下代碼:

class SynchronizedExample {protected static int num = 0;protected void numberOff(Object lock) {synchronized (lock) {for (int i = 0; i < 5; i++) {num++;System.out.println(Thread.currentThread().getName() + ':' + SynchronizedExample.num);}}}}public class SynchronizedTest {public static void main(String[] args) throws InterruptedException {SynchronizedExample se = new SynchronizedExample();for(int i=1; i<=3; i++) {new Thread( ()-> {se.numberOff(new Object());}, '隊列'+i).start();}}}

執行結果如下:

線程1:1線程2:2線程1:3線程3:4.......

四、類鎖

對于上述問題,讀者應該得出一個結論,要想達到同步的效果,必須用同一個鎖,此時類鎖可以粉末登場。看如下代碼:

protected void numberOff(Object lock) {synchronized (SynchronizedExample.class) {for (int i = 0; i < 5; i++) {num++;System.out.println(Thread.currentThread().getName() + ':' + SynchronizedExample.num);}}}

上述代碼可以達到同步的效果。

五、靜態鎖

靜態鎖是針對靜態方法而言,當一個靜態方法中有synchronized關鍵字時,默認的是使用當前類字節碼對象作為鎖。代碼示例如下:

class SynchronizedExample {protected static int num = 0;protected synchronized static void numberOff() {for (int i = 0; i < 5; i++) {num++;System.out.println(Thread.currentThread().getName() + ':' + SynchronizedExample.num);}}}public class SynchronizedTest {public static void main(String[] args) throws InterruptedException {for (int i = 1; i <= 3; i++) {new Thread(() -> { new SynchronizedExample().numberOff(); }, '隊列' + i).start();}}}

六、線程池實現

最后用線程池將上述代碼寫一下

package ioo;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;class SynchronizedExample {protected static int num = 0;protected synchronized static void numberOff() {for (int i = 0; i < 5; i++) {num++;System.out.println(Thread.currentThread().getName() + ':' + SynchronizedExample.num);}}}public class SynchronizedTest {public static void main(String[] args) throws InterruptedException {ExecutorService executorService = Executors.newCachedThreadPool();for(int i=1; i<=3; i++) {executorService.execute(() -> new SynchronizedExample().numberOff());}}}

以上就是淺析Java 并發編程中的synchronized的詳細內容,更多關于Java 并發編程 synchronized的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久av网站| 日韩在线麻豆| 另类av一区二区| 国产中文在线播放| 欧美三级第一页| 亚洲欧美日韩国产一区| 国产精品日本一区二区不卡视频| 欧美一级精品| 成人精品国产亚洲| 一区二区国产在线观看| 麻豆精品在线| 国产精品主播| 日韩福利视频导航| 久久国产高清| 亚洲一区二区毛片| 欧美肉体xxxx裸体137大胆| 毛片在线网站| 成人亚洲一区二区| 麻豆久久一区| 国产精品国产三级国产在线观看| 麻豆精品新av中文字幕| 久久久久97| 国内在线观看一区二区三区| 欧美另类中文字幕| 精品在线99| 免费观看在线综合色| 亚洲免费毛片| 国产精品2区| 日韩综合一区| 91精品亚洲| 尤物网精品视频| 久久中文字幕二区| 久久wwww| 麻豆精品蜜桃| 丝袜美腿成人在线| 中文不卡在线| 国产精品tv| 国产不卡精品在线| 久久久久久久久久久妇女| 黄色在线观看www| 99视频在线精品国自产拍免费观看| 亚洲一区二区三区中文字幕在线观看| 蜜桃一区二区三区在线观看| 国产精品久久久久久av公交车| 国产一区福利| 国产精品视区| 日本一二区不卡| 久久国产精品亚洲77777| 国产日本精品| 九九久久电影| 美女av一区| 亚洲一区二区小说| 日韩欧美1区| 欧美一区网站| 91欧美国产| 免费日韩一区二区| 欧美国产极品| 日本一区二区三区视频在线看| 久久久久.com| 国产一区二区三区四区五区| 亚洲无线观看| 91成人超碰| 天堂√中文最新版在线| 午夜天堂精品久久久久| 亚洲国产影院| 青草综合视频| 亚洲免费中文| 欧美日韩少妇| 人人香蕉久久| 国产精品一区二区三区av麻| 99精品综合| 久久婷婷久久| 激情亚洲影院在线观看| 国产一区二区三区探花| 国产精品毛片aⅴ一区二区三区| 国产传媒在线观看| 欧美成人精品午夜一区二区| 日韩黄色免费网站| 亚洲影院天堂中文av色| 欧美天堂亚洲电影院在线观看| 日韩毛片在线| 播放一区二区| 日韩国产一区二区三区| 美腿丝袜亚洲三区| 热久久国产精品| 亚洲永久字幕| 国产综合亚洲精品一区二| 麻豆久久一区二区| 欧美韩日一区| 午夜精品一区二区三区国产| 香蕉国产精品| 日韩精品欧美大片| 久久av国产紧身裤| 久久久久免费| 久久人人97超碰国产公开结果| 精品国模一区二区三区| 欧美jjzz| 伊人久久亚洲| 日韩精品一区二区三区中文在线 | 欧美sm一区| 亚洲二区在线| 日韩中文字幕在线一区| 免费看一区二区三区| 99精品电影| 国产亚洲高清一区| 欧美少妇精品| 免费精品视频| 精品视频在线你懂得| 亚洲天堂免费电影| 麻豆亚洲精品| 欧美aaaaaa午夜精品| 欧美成人日韩| 日本高清久久| 日韩精品一区二区三区免费观影 | www.51av欧美视频| 欧美日一区二区在线观看| 伊人影院久久| 麻豆视频在线观看免费网站黄| 欧美a一区二区| 老司机精品在线| 国产日韩亚洲欧美精品| 亚州av日韩av| 青草国产精品久久久久久| 日本一不卡视频| 欧美一级网址| 欧美激情视频一区二区三区免费| 97se亚洲| 久久精品国产成人一区二区三区| 7m精品国产导航在线| 欧美精品国产| 欧美aaaaaa午夜精品| 97精品国产| 成人国产精选| 欧美片第1页| 九九久久电影| 亚洲精选91| 麻豆免费精品视频| 日韩欧美自拍| 99成人在线| 欧美一级久久| 国产成人精品三级高清久久91| 日韩精品永久网址| 99在线观看免费视频精品观看| 亚洲在线一区| 欧美欧美黄在线二区| 国产成人精品999在线观看| 久久久久久美女精品| 亚洲欧美综合| 日本国产欧美| 精精国产xxxx视频在线播放| aⅴ色国产欧美| 91av一区| 五月天久久久| 国产欧美久久一区二区三区| 美女一区网站| 亚洲精品亚洲人成在线观看| 麻豆视频在线观看免费网站黄| 国产视频一区欧美| 里番精品3d一二三区| 亚洲天堂久久| 国产精品亲子伦av一区二区三区| 日韩精品2区| 蜜桃视频一区二区| 国产精品99一区二区三| 日韩影院免费视频| 丁香六月综合| 91精品国产一区二区在线观看 | 欧美精品自拍| 红杏一区二区三区| 日韩一二三区在线观看| 尤物tv在线精品| 国产中文欧美日韩在线| 午夜天堂精品久久久久| 99热免费精品| 国产专区精品| 日本成人精品| 麻豆成人在线| 在线视频精品| 婷婷中文字幕一区| 日韩精品午夜| 欧美精品高清| 日韩中文首页| 欧美天堂视频| 中文字幕在线免费观看视频| 国产精品一级| 国产亚洲精品精品国产亚洲综合| 蜜臀精品久久久久久蜜臀| 999在线观看精品免费不卡网站| 久久国产电影| 日本少妇一区| 久久国产欧美| 激情婷婷综合| 久久亚洲一区| 日本99精品| 国产精品久久久网站| 国产精品宾馆| 久久精品欧洲| 欧美日一区二区| 视频一区二区国产| 日本aⅴ精品一区二区三区|