精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試突擊:Synchronized有幾種用法?

開發 前端
當 synchronized 修飾靜態方法時,其作用范圍是整個程序,這個鎖對于所有調用這個鎖的對象都是互斥的。

在 Java 語言中,保證線程安全性的主要手段是加鎖,而 Java 中的鎖主要有兩種:synchronized 和 Lock,我們今天重點來看一下 synchronized 的幾種用法。

用法簡介

使用 synchronized 無需手動執行加鎖和釋放鎖的操作,我們只需要聲明 synchronized 關鍵字就可以了,JVM 層面會幫我們自動的進行加鎖和釋放鎖的操作。synchronized 可用于修飾普通方法、靜態方法和代碼塊,接下來我們分別來看。

1.修飾普通方法

synchronized 修飾普通方法的用法如下:

/**
* synchronized 修飾普通方法
*/
public synchronized void method() {
// ....
}

當 synchronized 修飾普通方法時,被修飾的方法被稱為同步方法,其作用范圍是整個方法,作用的對象是調用這個方法的對象。

2.修飾靜態方法

synchronized 修飾靜態方法和修飾普通方法類似,它的用法如下:

/**
* synchronized 修飾靜態方法
*/
public static synchronized void staticMethod() {
// .......
}

當 synchronized 修飾靜態方法時,其作用范圍是整個程序,這個鎖對于所有調用這個鎖的對象都是互斥的。

所謂的互斥,指的是同一時間只能有一個線程能使用,其他線程只能排隊等待。

修飾普通方法 VS 修飾靜態方法

synchronized 修飾普通方法和靜態方法看似相同,但二者完全不同,對于靜態方法來說 synchronized 加鎖是全局的,也就是整個程序運行期間,所有調用這個靜態方法的對象都是互斥的,而普通方法是針對對象級別的,不同的對象對應著不同的鎖,比如以下代碼,同樣是調用兩次方法,但鎖的獲取完全不同,實現代碼如下:

import java.time.LocalDateTime;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class SynchronizedUsage {
public static void main(String[] args) throws InterruptedException {
// 創建線程池同時執行任務
ExecutorService threadPool = Executors.newFixedThreadPool(10);

// 執行兩次靜態方法
threadPool.execute(() -> {
staticMethod();
});
threadPool.execute(() -> {
staticMethod();
});

// 執行兩次普通方法
threadPool.execute(() -> {
SynchronizedUsage usage = new SynchronizedUsage();
usage.method();
});
threadPool.execute(() -> {
SynchronizedUsage usage2 = new SynchronizedUsage();
usage2.method();
});
}

/**
* synchronized 修飾普通方法
* 本方法的執行需要 3s(因為有 3s 的休眠時間)
*/
public synchronized void method() {
System.out.println("普通方法執行時間:" + LocalDateTime.now());
try {
// 休眠 3s
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

/**
* synchronized 修飾靜態方法
* 本方法的執行需要 3s(因為有 3s 的休眠時間)
*/
public static synchronized void staticMethod() {
System.out.println("靜態方法執行時間:" + LocalDateTime.now());
try {
// 休眠 3s
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

以上程序的執行結果如下:

從上述結果可以看出,靜態方法加鎖是全局的,針對的是所有調用者;而普通方法加鎖是對象級別的,不同的對象擁有的鎖也不同。

3.修飾代碼塊

我們在日常開發中,最常用的是給代碼塊加鎖,而不是給方法加鎖,因為給方法加鎖,相當于給整個方法全部加鎖,這樣的話鎖的粒度就太大了,程序的執行性能就會受到影響,所以通常情況下,我們會使用 synchronized 給代碼塊加鎖,它的實現語法如下:

public void classMethod() throws InterruptedException {
// 前置代碼...

// 加鎖代碼
synchronized (SynchronizedUsage.class) {
// ......
}

// 后置代碼...
}

從上述代碼我們可以看出,相比于修飾方法,修飾代碼塊需要自己手動指定加鎖對象,加鎖的對象通常使用 this 或 xxx.class 這樣的形式來表示,比如以下代碼:

// 加鎖某個類
synchronized (SynchronizedUsage.class) {
// ......
}

// 加鎖當前類對象
synchronized (this) {
// ......
}

this VS class

使用 synchronized 加鎖 this 和 xxx.class 是完全不同的,當加鎖 this 時,表示用當前的對象進行加鎖,每個對象都對應了一把鎖;而當使用 xxx.class 加鎖時,表示使用某個類(而非類實例)來加鎖,它是應用程序級別的,是全局生效的,如以下代碼所示:

import java.time.LocalDateTime;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class SynchronizedUsageBlock {
public static void main(String[] args) throws InterruptedException {
// 創建線程池同時執行任務
ExecutorService threadPool = Executors.newFixedThreadPool(10);

// 執行兩次 synchronized(this)
threadPool.execute(() -> {
SynchronizedUsageBlock usage = new SynchronizedUsageBlock();
usage.thisMethod();
});
threadPool.execute(() -> {
SynchronizedUsageBlock usage2 = new SynchronizedUsageBlock();
usage2.thisMethod();
});

// 執行兩次 synchronized(xxx.class)
threadPool.execute(() -> {
SynchronizedUsageBlock usage3 = new SynchronizedUsageBlock();
usage3.classMethod();
});
threadPool.execute(() -> {
SynchronizedUsageBlock usage4 = new SynchronizedUsageBlock();
usage4.classMethod();
});
}

/**
* synchronized(this) 加鎖
* 本方法的執行需要 3s(因為有 3s 的休眠時間)
*/
public void thisMethod() {
synchronized (this) {
System.out.println("synchronized(this) 加鎖:" + LocalDateTime.now());
try {
// 休眠 3s
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

/**
* synchronized(xxx.class) 加鎖
* 本方法的執行需要 3s(因為有 3s 的休眠時間)
*/
public void classMethod() {
synchronized (SynchronizedUsageBlock.class) {
System.out.println("synchronized(xxx.class) 加鎖:" + LocalDateTime.now());
try {
// 休眠 3s
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

以上程序的執行結果如下:

總結

synchronized 用 3 種用法,用它可以來修飾普通方法、靜態方法和代碼塊,其中最常用的是修飾代碼塊,而修飾代碼塊時需要指定一個加鎖對象,這個加鎖對象通常使用 this 或 xxx.class 來表示,當使用 this 時,表示使用當前對象來加鎖,而使用 class 時,表示表示使用某個類(非類對象實例)來加鎖,它是全局生效的。

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2022-04-24 07:59:53

synchronizJVMAPI

2022-04-18 07:36:37

TimeUnit線程休眠

2022-09-19 06:16:23

事務隔離級別Spring

2022-05-23 07:35:15

單例模式懶漢模式靜態內部類

2022-04-13 14:43:05

JVM同步鎖Monitor 監視

2022-03-07 07:33:16

線程池Java語言

2022-08-24 07:06:36

SpringSetter項目

2022-08-17 07:06:14

SpringBoot配置@Value

2024-09-27 08:57:36

2022-05-05 07:38:32

volatilJava并發

2022-06-06 07:35:26

MySQLInnoDBMyISAM

2022-05-11 07:41:55

死鎖運算線程

2022-08-22 07:06:32

MyBatisSQL占位符

2022-06-29 08:16:55

對象String字面量

2022-08-31 07:04:50

Bean作用域

2022-08-03 07:04:56

GETHTTPPOST

2022-04-26 08:02:00

locktryLocklockInterr

2022-08-10 07:06:57

IoCDISpring

2022-02-08 07:02:32

進程線程操作系統

2022-08-15 07:06:50

Propertiesyml配置
點贊
收藏

51CTO技術棧公眾號

日韩中文字幕观看| 国产男女猛烈无遮挡在线喷水| 24小时免费看片在线观看 | 三级网站免费看| 男女在线观看视频| 2020国产精品久久精品美国| 国产精品免费小视频| 亚洲综合视频网站| 欧美高清视频看片在线观看| 欧美私人免费视频| 国产夫妻自拍一区| h网站视频在线观看| 国产精品1024久久| 日韩免费观看视频| 久久黄色小视频| 国产亚洲一区| 精品国产一区二区三区av性色| 日韩黄色片视频| www在线视频| 国产亚洲人成网站| 国产高清在线一区| 一二三区在线播放| 久久久久一区| 久久久久久久久综合| 日本黄区免费视频观看| 免费日韩一区二区三区| 欧美一区二区视频网站| 久久久久久久少妇| 成年人在线网站| 亚洲精品日韩一| 亚洲va韩国va欧美va精四季| 少妇精品视频一区二区| 国产一区二区中文字幕| 国产成人免费av| 日本视频www| 午夜电影亚洲| 久久精品中文字幕免费mv| 人人妻人人藻人人爽欧美一区| 亚洲精品a区| 51午夜精品国产| 国产三级三级看三级| 韩国成人漫画| 狠狠躁18三区二区一区| 男人天堂手机在线视频| 国产福利在线播放麻豆| 国产精品欧美一区二区三区| 欧美日韩精品不卡| 天堂а在线中文在线无限看推荐| 国产成人在线电影| 91黄在线观看| 国产ts变态重口人妖hd| 国产一区二三区好的| 91久久国产精品91久久性色| 中文字幕在线观看国产| 日韩精品亚洲一区| 日韩av电影在线播放| 国产www在线| 亚洲欧美大片| 琪琪亚洲精品午夜在线| 亚洲第一精品在线观看 | 午夜精品一区二区三区在线| 欧美日韩免费做爰视频| 午夜国产精品视频免费体验区| 麻豆乱码国产一区二区三区| 全程偷拍露脸中年夫妇| 欧美日韩福利| 国自产精品手机在线观看视频| 国产精品a成v人在线播放| 日韩视频在线一区二区三区 | 日韩中文字幕高清| 狂野欧美一区| 国产精品久久久久久超碰| 最近中文字幕在线免费观看| 美女脱光内衣内裤视频久久影院| 国产日韩精品入口| 国产av精国产传媒| av一二三不卡影片| 狼狼综合久久久久综合网| 国产一级二级三级在线观看| 亚洲国产高清不卡| 在线观看18视频网站| 国产后进白嫩翘臀在线观看视频| 午夜精品123| 黑森林福利视频导航| 成人在线黄色| 欧美一区二区精美| 一级特黄a大片免费| 精品久久久久久久久久久下田| 在线播放国产一区二区三区| 国产一二三区精品| 亚洲麻豆一区| 国产精品网红直播| 国产91免费在线观看| 久久久久国产精品麻豆ai换脸| 色噜噜一区二区| 在线播放免费av| 一本色道久久综合亚洲91| 国产日韩欧美久久| 国产精品tv| 一区二区三区四区精品| 青青草手机视频在线观看| 久久av最新网址| 91在线色戒在线| 牛牛澡牛牛爽一区二区| 综合久久久久久| 国产一区亚洲二区三区| 精品一区二区三区亚洲| 亚洲色图在线观看| 国产一级一片免费播放| 青青草国产精品97视觉盛宴| 不卡的av一区| 永久免费在线观看视频| 亚洲国产成人av好男人在线观看| 日本美女高潮视频| 国产精品45p| 久久香蕉国产线看观看网| 成人免费区一区二区三区| 久久99精品国产麻豆不卡| 免费成人深夜夜行视频| 欧美日韩经典丝袜| 欧美片在线播放| 蜜桃无码一区二区三区| 亚洲第一精品影视| 亚洲精品欧美日韩| 最新97超碰在线| 色呦呦网站一区| 天天躁日日躁狠狠躁av| 91精品一区二区三区综合| 国产99久久精品一区二区 夜夜躁日日躁 | 欧美一区二区精品在线| 黄色国产在线播放| 久久青草久久| 精品一区二区三区国产| 四虎影院观看视频在线观看| 欧美精品久久久久久久久老牛影院| 在线免费观看成年人视频| 狠狠干成人综合网| 97在线电影| 成人免费网址| 91麻豆精品国产91久久久更新时间 | 亚洲一区二区视频在线播放| 久久综合成人精品亚洲另类欧美| 国产精彩视频一区二区| 日韩成人在线看| 理论片在线不卡免费观看| 91麻豆视频在线观看| 国产精品午夜在线| 久久国产这里只有精品| 青青草国产免费一区二区下载| 日本成人激情视频| 你懂得网站在线| 欧美性生交大片免费| 巨胸大乳www视频免费观看| 亚洲视频www| 久久久久久久久久久久久久久久av | 外国精品视频在线观看| 欧美日韩国产页| 久久久久亚洲av无码专区桃色| 国产精品综合| 欧美日韩亚洲免费| 久久久人成影片一区二区三区在哪下载 | 欧美专区中文字幕| 日韩精品一二| 在线免费av一区| 国产又粗又猛又爽又黄的视频小说| 人人狠狠综合久久亚洲| 一本一生久久a久久精品综合蜜| 精品三级在线| 欧美精品午夜视频| 天堂av资源在线| 一本久道久久综合中文字幕| 青娱乐国产视频| 国精产品一区一区三区mba桃花 | 亚洲精品久久久久中文字幕欢迎你| 国产午夜福利一区二区| 久久综合久色欧美综合狠狠| 啊啊啊国产视频| 欧美色图在线播放| 亚洲va久久久噜噜噜| 成人在线高清免费| 亚洲乱亚洲乱妇无码| 中文字幕免费观看视频| 亚洲精品高清在线| 少妇大叫太粗太大爽一区二区| 免费成人在线视频观看| 99久久久精品视频| 偷窥自拍亚洲色图精选| 国产精品一区二区久久| 日本aa在线| 一本色道久久88综合亚洲精品ⅰ| 国产色片在线观看| 狠狠久久亚洲欧美专区| 久久久久亚洲av片无码| 99免费精品在线| 亚欧美在线观看| 99视频在线精品国自产拍免费观看| 秋霞毛片久久久久久久久| 精品一区二区三区中文字幕视频 | 在线观看欧美| 97国产在线视频| 日本综合在线| 日韩精品久久久久久久玫瑰园| 在线视频播放大全| 欧美日韩国产精品一区| 内射一区二区三区| 久久久久国产精品麻豆| 一区二区三区四区影院| 青青国产91久久久久久| 久久综合九色综合88i| 91精品综合| 日韩在线国产| 亚洲精品中文字幕99999| 999国内精品视频在线| 欧美日韩五区| 97香蕉超级碰碰久久免费软件| 午夜免费播放观看在线视频| 亚洲乱亚洲乱妇无码| 丰满熟妇人妻中文字幕| 欧美剧情片在线观看| 亚洲图片在线视频| 亚洲不卡在线观看| 欧美黄色aaa| 中文字幕在线观看一区二区| 一级黄色片大全| 99热在这里有精品免费| 国产老头和老头xxxx×| 久久国产精品99精品国产 | 国产亚洲成人av| 亚洲免费av网站| jizzjizzjizz国产| 日本一区二区视频在线观看| 少妇特黄一区二区三区| 成人精品视频.| 四虎成人免费视频| 国产福利一区在线| 杨幂一区二区国产精品| 国产在线麻豆精品观看| 在线观看岛国av| 麻豆成人91精品二区三区| 日韩亚洲在线视频| 久久国产99| 欧美成人xxxxx| 国产视频一区免费看| 免费看国产一级片| 一区二区三区四区五区精品视频 | 日本精品一区二区三区不卡无字幕| 国产精品毛片av| 国产精品乱码一区二区三区| 999国产精品一区| 999视频在线观看| 亚洲专区**| 国产欧美一区二区三区不卡高清| 91成人在线精品视频| 国产一区二区精品免费| 久本草在线中文字幕亚洲| 国外成人在线视频网站| 里番精品3d一二三区| 久热国产精品视频一区二区三区| 五月天亚洲一区| 日韩国产伦理| 99tv成人| 国产成人生活片| 亚洲福利专区| 黄色片视频在线播放| 蜜桃久久精品一区二区| 老司机久久精品| 国内精品不卡在线| 午夜不卡久久精品无码免费| 99精品国产99久久久久久白柏| 狠狠人妻久久久久久综合蜜桃| 久久久一区二区三区| 久久久久亚洲AV成人无在 | 亚洲人线精品午夜| 1769视频在线播放免费观看| 久久久www成人免费精品| 国产极品人妖在线观看| 日本伊人精品一区二区三区介绍| 99久久亚洲国产日韩美女| 91视频国产一区| 国产精品调教| 日韩欧美在线电影| 综合久久婷婷| 日韩av资源在线| 精品一区二区三区欧美| 国产精品成人99一区无码| 久久精品视频免费| 成人免费视频网站入口::| 亚洲va韩国va欧美va| 国产免费a视频| 欧美成人猛片aaaaaaa| 国内在线免费高清视频| 久久av.com| xxxxxx欧美| 亚洲xxx大片| 国产va免费精品观看精品视频 | 日韩中文字幕av电影| 九九久久久久久| 久久嫩草精品久久久精品一| 欧美手机在线观看| 日本久久一区二区三区| 国产高清第一页| 一个色综合导航| а√在线中文在线新版| 国产男女猛烈无遮挡91| 久久丝袜视频| 蜜臀在线免费观看| 秋霞av亚洲一区二区三| xfplay5566色资源网站| 亚洲色图制服诱惑| 国产成人无码专区| 精品国产乱码久久久久久蜜臀| 1024国产在线| 日韩**中文字幕毛片| www.久久东京| 一级一片免费播放| 日韩极品在线观看| 成年人的黄色片| 亚洲精品成人少妇| 真实的国产乱xxxx在线91| 日韩av在线免费看| 欧美黑人猛交的在线视频| 国产精品永久免费观看| 日韩欧美ww| 久久久亚洲国产精品| 国产精品自拍毛片| 亚洲黄色网址大全| 欧洲另类一二三四区| 亚洲 另类 春色 国产| 久久久久久国产三级电影| 精品网站999| 警花观音坐莲激情销魂小说| 日av在线不卡| 美国精品一区二区| 欧美视频一区在线| av国产在线观看| 国产精品69久久| 欧美极品在线观看| 日韩久久一级片| 久久亚洲私人国产精品va媚药| 日韩黄色a级片| 亚洲成人教育av| 丁香花在线高清完整版视频| 高清国产在线一区| 亚洲二区精品| 黄色a一级视频| 欧美日韩综合视频| 欧美18xxxxx| 国产精品极品在线| 欧美hd在线| 精品国产鲁一鲁一区二区三区| 国产精品久99| 国产特级aaaaaa大片| 裸体女人亚洲精品一区| 亚洲视频三区| av高清在线免费观看| 99re在线视频这里只有精品| 亚洲日本韩国在线| 精品一区二区电影| 久久91导航| 伊人av成人| 国产高清久久久| 天海翼一区二区| 亚洲午夜精品久久久久久久久久久久| 芒果视频成人app| 亚洲一区综合| 国产成人午夜精品影院观看视频| 玖玖爱免费视频| 日韩成人激情视频| 91精品国产66| 日韩中文字幕亚洲精品欧美| 国产成人h网站| 日韩精品在线免费视频| 在线观看亚洲区| 精品国产亚洲日本| 毛片在线播放视频| 中文一区二区在线观看 | 亚洲美女在线观看| av成人在线看| av一区二区三区免费观看| 99久久免费精品| 亚洲精品国产精品乱码视色| 久久九九免费视频| 日韩有码av| 看看黄色一级片| 午夜一区二区三区视频| 成人在线免费视频| 亚洲最大成人网色| 久久精品综合| 久久久久亚洲av成人片| 亚洲天堂网在线观看| 视频一区视频二区欧美| 欧美极品欧美精品欧美图片| 国产精品福利影院| 人妻精品一区一区三区蜜桃91| 国产成人在线精品| 欧美日韩国产高清| 欧美性受xxxx黑人| 日韩不卡在线观看| 亚洲ww精品| 欧美韩国日本在线|