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

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

淺析Java 并發編程中的synchronized

瀏覽:2日期: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久久,三上悠亚国产精品一区二区三区
精品久久在线| 91亚洲国产| 久久国产亚洲精品| 樱桃视频成人在线观看| 午夜影院一区| 三级小说欧洲区亚洲区| 人人香蕉久久| 亚洲专区在线| 日本国产一区| 亚洲18在线| 亚洲精品激情| 麻豆精品蜜桃视频网站| 国产一区二区三区四区大秀| 欧美日韩 国产精品| 久久久成人网| 激情中国色综合| 国产精品v日韩精品v欧美精品网站| 亚洲一区日本| 国产一区调教| 999久久久亚洲| 日韩在线视频一区二区三区| 首页国产精品| 免费观看在线综合| 国际精品欧美精品| 九九综合九九| 国产精品大片| 蜜桃一区二区三区在线| 国产一区二区三区国产精品| 影音国产精品| 久久久久久色 | 国产亚洲毛片在线| 国产日韩欧美高清免费| 黄色欧美在线| 中文字幕中文字幕精品| 亚洲黄色网址| 国产精品久久国产愉拍| 欧美成a人免费观看久久| 欧美日韩午夜| 蜜臀av在线播放一区二区三区| 激情自拍一区| 国产精品hd| 日韩一二三区在线观看| 国产精品毛片| 亚洲一级特黄| 久久亚洲在线| 日韩一区二区三区免费| 麻豆国产一区| 日韩国产91| 蜜桃视频一区二区三区在线观看| 婷婷亚洲五月| 欧美日韩尤物久久| 美女尤物国产一区| 国产精品网站在线看| 色8久久久久| 亚洲麻豆一区| 综合激情网...| 蜜桃av一区| 精品日韩毛片| 91九色精品国产一区二区| 久久精品91| 一区在线免费| 亚洲精选成人| 99国产成+人+综合+亚洲欧美| 伊人久久大香伊蕉在人线观看热v| 久久久久久久久99精品大| 国产精品一卡| 成人影视亚洲图片在线| 欧产日产国产精品视频| 国产不卡精品在线| 91视频精品| 亚洲精品网址| 日韩精品国产精品| 国产一区二区三区四区二区| 日韩一区自拍| 日韩制服丝袜先锋影音| 综合国产在线| 久久精品色播| 青青青免费在线视频| 亚洲免费观看| 国产精区一区二区| 91精品国产成人观看| 亚洲免费婷婷| 九九久久国产| 久久午夜精品| 三上亚洲一区二区| 亚洲综合欧美| 岛国精品一区| 日韩中文字幕一区二区高清99| 久久中文字幕av| 亚洲九九精品| 久久精品亚洲人成影院| 91成人精品在线| 日韩在线短视频| 日韩不卡手机在线v区| 亚洲伦乱视频| 国产精品99久久免费观看| 在线亚洲精品| 蜜臀久久精品| 久久精品国产在热久久| 免费久久99精品国产自在现线| 国产一区亚洲| 国产精品一区二区免费福利视频| 天海翼精品一区二区三区| 亚洲天堂av影院| 美女国产一区二区三区| 亚洲精品高潮| 美女网站久久| 亚洲福利久久| 国产高清不卡| 国产精品99在线观看| 国产精品久久国产愉拍| 欧美日韩视频| 日韩精品免费一区二区在线观看 | 国产精品社区| 成人久久一区| 日韩精品91| 久久精品国产久精国产爱| 日韩高清欧美| 亚洲黄色免费av| 国产精品毛片一区二区在线看| 日本欧美大码aⅴ在线播放| 亚洲成人一区| 久久精品导航| japanese国产精品| 亚洲欧洲高清| 色老板在线视频一区二区| 92国产精品| 日韩精品一区二区三区免费观看| 欧美亚洲在线日韩| 99精品在线观看| 伊人久久高清| 欧美日韩亚洲在线观看| 午夜欧美理论片| 综合欧美精品| 国产精品22p| 成午夜精品一区二区三区软件| 好看不卡的中文字幕| 麻豆成全视频免费观看在线看| 免费日韩一区二区| 日韩视频一区| 色综合视频一区二区三区日韩 | 久久香蕉网站| 久久av资源| 日韩精品电影| 丝袜亚洲另类欧美| 亚洲aa在线| 国产理论在线| 玖玖玖国产精品| 精品国产中文字幕第一页| 日本一二区不卡| 红桃视频国产一区| 国产色噜噜噜91在线精品| 激情久久99| 狠狠色综合网| 老司机精品视频网| 欧美日韩第一| 国产极品一区| 欧美日韩国产欧| 国产精品xxx在线观看| 蜜桃av.网站在线观看| 免费观看久久av| 国产精品久久久久av蜜臀| 黄色亚洲精品| 伊人久久高清| 久久不卡国产精品一区二区| 激情欧美日韩一区| 久久影视三级福利片| 久久福利毛片| 欧美成人亚洲| 国产高潮在线| 国产精品一区二区中文字幕| 免播放器亚洲| 亚洲无线一线二线三线区别av| 日韩精品dvd| 亚洲精品中文字幕99999| 国产在线看片免费视频在线观看| 久久伊人久久| 丝袜亚洲另类欧美 | 日韩欧美在线中字| 免费在线看一区| 精品日韩毛片| 天堂资源在线亚洲| 不卡专区在线| 国产精品99一区二区三| 美女久久精品| 国产精品视频一区二区三区| 91精品麻豆| 国产图片一区| 国产日韩一区二区三区在线| 国产精品嫩草99av在线| 黑丝美女一区二区| 欧美午夜不卡| 久久福利影视| 日韩欧美美女在线观看| 亚洲日本欧美| 欧美性www| 成人亚洲一区| 秋霞国产精品| 国产一区白浆| 日韩精品视频在线看|