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

Synchronized 加鎖 This 和Class 的區(qū)別!

開發(fā) 后端
synchronized 是 Java 語言中處理并發(fā)問題的一種常用手段,它也被我們親切的稱之為“Java 內(nèi)置鎖”,由此可見其地位之高。然而 synchronized 卻有著多種用法,當(dāng)它修飾不同對象時(shí),其意義也是不同的,下面我們一起來看。

[[414654]]

本文轉(zhuǎn)載自微信公眾號「Java中文社群」,作者磊哥。轉(zhuǎn)載本文請聯(lián)系Java中文社群公眾號。

synchronized 是 Java 語言中處理并發(fā)問題的一種常用手段,它也被我們親切的稱之為“Java 內(nèi)置鎖”,由此可見其地位之高。然而 synchronized 卻有著多種用法,當(dāng)它修飾不同對象時(shí),其意義也是不同的,下面我們一起來看。

synchronized 用法

synchronized 可以用來修飾普通方法、靜態(tài)方法和代碼塊。

① 修飾普通方法

  1. /** 
  2.  * synchronized 修飾普通方法 
  3.  */ 
  4. public synchronized void method() { 
  5.     // ....... 

當(dāng) synchronized 修飾普通方法時(shí),被修飾的方法被稱為同步方法,其作用范圍是整個(gè)方法,作用的對象是調(diào)用這個(gè)方法的對象。

② 修飾靜態(tài)方法

  1. /** 
  2.  * synchronized 修飾靜態(tài)方法 
  3.  */ 
  4. public static synchronized void staticMethod() { 
  5.     // ....... 

當(dāng) synchronized 修飾靜態(tài)的方法時(shí),其作用的范圍是整個(gè)方法,作用對象是調(diào)用這個(gè)類的所有對象。

③ 修飾代碼塊

為了減少鎖的粒度,我們可以選擇在一個(gè)方法中的某個(gè)部分使用 synchronized 來修飾(一段代碼塊),從而實(shí)現(xiàn)對一個(gè)方法中的部分代碼進(jìn)行加鎖,實(shí)現(xiàn)代碼如下:

  1. public void classMethod() throws InterruptedException { 
  2.     // 前置代碼... 
  3.      
  4.     // 加鎖代碼 
  5.     synchronized (SynchronizedExample.class) { 
  6.         // ...... 
  7.     } 
  8.      
  9.     // 后置代碼... 

以上代碼在執(zhí)行時(shí),被修飾的代碼塊稱為同步語句塊,其作用范圍是大括號“{}”括起來的代碼塊,作用的對象是調(diào)用這個(gè)代碼塊的對象。

但以上代碼,除了可以加鎖 class 之外,還可以加鎖 this,具體示例如下:

  1. public void classMethod() throws InterruptedException { 
  2.     // 前置處理代碼... 
  3.     synchronized (this) { 
  4.         // ...... 
  5.     } 
  6.     // 后置處理代碼... 

那問題來了,使用 synchronized 加鎖 this 和 class 的區(qū)別是什么?不都是加鎖同一個(gè)類嗎?

答案還真不是,加鎖 this 和 class 區(qū)別還是很大的。下面我們通過以下 4 個(gè)示例,來看二者之間的區(qū)別。

1.加鎖 class 共享一個(gè)類實(shí)例

首先,我們創(chuàng)建 5 個(gè)線程,調(diào)用同一個(gè)對象下 synchronized 加鎖的 class 代碼,具體示例如下:

  1. import java.util.Date
  2. import java.util.concurrent.TimeUnit; 
  3.  
  4. public class SynchronizedExample { 
  5.  
  6.     public static void main(String[] args) { 
  7.         // 創(chuàng)建當(dāng)前類實(shí)例 
  8.         final SynchronizedExample example = new SynchronizedExample(); 
  9.         // 創(chuàng)建 5 個(gè)線程執(zhí)行任務(wù) 
  10.         for (int i = 0; i < 5; i++) { 
  11.             new Thread(new Runnable() { 
  12.                 @Override 
  13.                 public void run() { 
  14.                     try { 
  15.                         // 調(diào)用 synchronized 修飾的 class 方法 
  16.                         example.classMethod(); 
  17.                     } catch (InterruptedException e) { 
  18.                         e.printStackTrace(); 
  19.                     } 
  20.                 } 
  21.             }).start(); 
  22.         } 
  23.     } 
  24.  
  25.     /** 
  26.      * synchronized 修飾的 class 方法 
  27.      * @throws InterruptedException 
  28.      */ 
  29.     public void classMethod() throws InterruptedException { 
  30.         synchronized (SynchronizedExample.class) { 
  31.             System.out.println(String.format("當(dāng)前執(zhí)行線程:%s,執(zhí)行時(shí)間:%s"
  32.                     Thread.currentThread().getName(), new Date())); 
  33.             TimeUnit.SECONDS.sleep(1); 
  34.         } 
  35.     } 

以上程序的執(zhí)行結(jié)果如下:

從上述結(jié)果可以看出,這 5 個(gè)線程共享的是同一把鎖。

2.加鎖 class 創(chuàng)建多個(gè)實(shí)例

接下來,我們創(chuàng)建 5 個(gè)線程,調(diào)用不同對象下 synchronized 加鎖的 class 代碼,具體示例如下:

  1. import java.util.Date
  2. import java.util.concurrent.TimeUnit; 
  3.  
  4. public class SynchronizedExample { 
  5.  
  6.     public static void main(String[] args) { 
  7.         // 創(chuàng)建 5 個(gè)線程執(zhí)行任務(wù) 
  8.         for (int i = 0; i < 5; i++) { 
  9.             new Thread(new Runnable() { 
  10.                 @Override 
  11.                 public void run() { 
  12.                     try { 
  13.                         // 創(chuàng)建類實(shí)例 
  14.                         SynchronizedExample example = new SynchronizedExample(); 
  15.                         // 調(diào)用 synchronized 修飾的 class 方法 
  16.                         example.classMethod(); 
  17.                     } catch (InterruptedException e) { 
  18.                         e.printStackTrace(); 
  19.                     } 
  20.                 } 
  21.             }).start(); 
  22.         } 
  23.     } 
  24.      
  25.     /** 
  26.      * synchronized 修飾的 class 方法 
  27.      * @throws InterruptedException 
  28.      */ 
  29.     public void classMethod() throws InterruptedException { 
  30.         synchronized (SynchronizedExample.class) { 
  31.             System.out.println(String.format("當(dāng)前執(zhí)行線程:%s,執(zhí)行時(shí)間:%s"
  32.                     Thread.currentThread().getName(), new Date())); 
  33.             TimeUnit.SECONDS.sleep(1); 
  34.         } 
  35.     } 

以上程序的執(zhí)行結(jié)果如下:

從上述結(jié)果可以看出,雖然是不同的對象,但它們使用的仍然是同一把鎖。

3.加鎖 this 共享一個(gè)類實(shí)例

接下來,我們創(chuàng)建 5 個(gè)線程,調(diào)用 synchronized 加鎖 this 的示例。首先我們這 5 個(gè)線程調(diào)用同一個(gè)對象的加鎖方法,示例代碼如下:

  1. import java.util.Date
  2. import java.util.concurrent.TimeUnit; 
  3.  
  4. public class SynchronizedExample { 
  5.  
  6.     public static void main(String[] args) { 
  7.         // 創(chuàng)建當(dāng)前類實(shí)例 
  8.         final SynchronizedExample example = new SynchronizedExample(); 
  9.         // 創(chuàng)建 5 個(gè)線程執(zhí)行任務(wù) 
  10.         for (int i = 0; i < 5; i++) { 
  11.             new Thread(new Runnable() { 
  12.                 @Override 
  13.                 public void run() { 
  14.                     try { 
  15.                         // 調(diào)用 synchronized 修飾的 this 方法 
  16.                         example.thisMethod(); 
  17.                     } catch (InterruptedException e) { 
  18.                         e.printStackTrace(); 
  19.                     } 
  20.                 } 
  21.             }).start(); 
  22.         } 
  23.     } 
  24.      
  25.     /** 
  26.      * synchronized 修飾的 this 方法 
  27.      * @throws InterruptedException 
  28.      */ 
  29.     public void thisMethod() throws InterruptedException { 
  30.         synchronized (this) { 
  31.             System.out.println(String.format("當(dāng)前執(zhí)行線程:%s,執(zhí)行時(shí)間:%s"
  32.                     Thread.currentThread().getName(), new Date())); 
  33.             TimeUnit.SECONDS.sleep(1); 
  34.         } 
  35.     } 

以上程序的執(zhí)行結(jié)果如下:

從上述結(jié)果可以看出,以上線程使用的都是同一把鎖。

4.加鎖 this 創(chuàng)建多個(gè)類實(shí)例

最后一個(gè)示例最為特殊,我們使用 synchronized 加鎖 this,讓這 5 個(gè)線程調(diào)用各自創(chuàng)建對象的方法,具體示例如下:

  1. import java.util.Date
  2. import java.util.concurrent.TimeUnit; 
  3.  
  4. public class SynchronizedExample { 
  5.  
  6.     public static void main(String[] args) { 
  7.         // 創(chuàng)建 5 個(gè)線程執(zhí)行任務(wù) 
  8.         for (int i = 0; i < 5; i++) { 
  9.             new Thread(new Runnable() { 
  10.                 @Override 
  11.                 public void run() { 
  12.                     try { 
  13.                         // 創(chuàng)建(多個(gè))類實(shí)例 
  14.                         SynchronizedExample example = new SynchronizedExample(); 
  15.                         // 調(diào)用 synchronized 修飾的 this 方法 
  16.                         example.thisMethod(); 
  17.                     } catch (InterruptedException e) { 
  18.                         e.printStackTrace(); 
  19.                     } 
  20.                 } 
  21.             }).start(); 
  22.         } 
  23.     } 
  24.      
  25.     /** 
  26.      * synchronized 修飾的 this 方法 
  27.      * @throws InterruptedException 
  28.      */ 
  29.     public void thisMethod() throws InterruptedException { 
  30.         synchronized (this) { 
  31.             System.out.println(String.format("當(dāng)前執(zhí)行線程:%s,執(zhí)行時(shí)間:%s"
  32.                     Thread.currentThread().getName(), new Date())); 
  33.             TimeUnit.SECONDS.sleep(1); 
  34.         } 
  35.     } 

以上程序的執(zhí)行結(jié)果如下:

從上述結(jié)果可以看出,當(dāng)使用 synchronized 加鎖 this 時(shí),如果線程調(diào)用的不是同一個(gè)對象,那么這些線程之間使用的鎖都是自己獨(dú)立的鎖,這個(gè)結(jié)果就和 synchronized 加鎖 class 的結(jié)果完全不同了。

總結(jié)

通過以上 4 個(gè)示例我們可以得出結(jié)論,當(dāng)使用 synchronized 加鎖 class 時(shí),無論共享一個(gè)對象還是創(chuàng)建多個(gè)對象,它們用的都是同一把鎖,而使用 synchronized 加鎖 this 時(shí),只有同一個(gè)對象會使用同一把鎖,不同對象之間的鎖是不同的。

 

責(zé)任編輯:武曉燕 來源: Java中文社群
相關(guān)推薦

2021-08-24 10:25:19

thisclassJava

2024-02-26 07:36:09

lockJava語言

2022-04-24 07:59:53

synchronizJVMAPI

2023-02-01 07:15:16

2020-03-10 10:25:38

volatileJava編程語言

2021-02-01 14:10:16

JavaClass.forNaClassLoader

2022-11-09 10:46:18

AQS加鎖機(jī)制

2025-09-09 07:05:51

2021-08-31 06:37:35

Java 語言 Java 基礎(chǔ)

2020-09-23 09:08:05

typescript

2010-08-30 10:52:39

CSSclassid

2010-08-23 14:16:17

DIVclassid

2009-10-10 14:40:03

C++中struct

2021-01-14 08:58:12

Synchronize鎖操作

2010-08-23 10:57:14

CSSclassid

2009-08-27 15:48:40

interfaceabstract cl

2009-08-27 16:22:58

interfaceabstract cl

2017-12-06 16:28:48

Synchronize實(shí)現(xiàn)原理

2025-01-02 12:59:55

Python面向?qū)ο缶幊?/a>type

2021-03-04 08:26:17

synchronizeReentrantLojava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

天天操天天操天天操| 日本少妇高清视频| av久久网站| 椎名由奈av一区二区三区| 91久久大香伊蕉在人线| 免费一级片在线观看| 妖精一区二区三区精品视频| 欧美美女一区二区三区| 欧美精品卡一卡二| 波多野结衣一区二区| 狠狠色综合日日| 国语自产精品视频在线看一大j8 | 成人avav在线| 国产精品99久久99久久久二8| 久久免费看少妇高潮v片特黄| 久久久亚洲欧洲日产| 欧美色图第一页| 欧美乱大交xxxxx潮喷l头像| 素人av在线| 99精品热视频| 91香蕉视频在线下载| 亚洲成人av影片| 欧美视频亚洲视频| 中文字幕亚洲一区在线观看 | 亚洲无码久久久久| 影音先锋在线一区| 精品国产欧美一区二区三区成人| 日本美女视频网站| 日韩有码欧美| 在线日韩一区二区| 少妇高潮喷水在线观看| av网址在线| 日本一区二区三区四区| 精品国产aⅴ麻豆| 性猛交xxxx乱大交孕妇印度| 美国十次了思思久久精品导航| 2019中文字幕在线观看| 中文字幕五月天| 97国产成人高清在线观看| 亚洲乱亚洲乱妇无码| 97人妻精品一区二区三区免费| 亚洲国产精选| 欧美日韩黄视频| 日本www.色| 欧美香蕉视频| 欧美日韩国产精品一区二区三区四区| 久久亚洲a v| 日本最黄一级片免费在线| 久久久国产精品不卡| 久久久神马电影| 天天舔天天干天天操| 不卡影院免费观看| 精品日韩美女| 香蕉av在线播放| 波多野洁衣一区| 国产精品一区在线播放| 六月婷婷综合网| 成人97人人超碰人人99| 激情一区二区三区| 巨骚激情综合| 亚洲国产成人一区二区三区| 视频一区二区在线| 男人影院在线观看| 亚洲婷婷综合色高清在线| 国产精品无码乱伦| 羞羞视频在线观看不卡| 亚洲一二三四在线观看| 国产在线播放观看| 亚洲国产福利| 欧美影院午夜播放| 五月天婷婷影视| 欧美午夜网站| 亚洲国产精品久久久久久| 中文字幕乱码在线| 欧美美乳视频| zzijzzij亚洲日本成熟少妇| 欧美日韩精品一区二区三区视频播放| 国产精品hd| 欧美性受xxx| 正在播放木下凛凛xv99| 国模无码大尺度一区二区三区 | 欧洲vs亚洲vs国产| 国产亚洲一区二区精品| 午夜激情福利网| 欧美91视频| 全球成人中文在线| 亚洲综合精品国产一区二区三区| 国产九色精品成人porny| 国产一区二区不卡视频在线观看| 欧洲毛片在线| 成人免费在线视频观看| 麻豆tv在线播放| 免费观看成人性生生活片 | 国产精品极品尤物在线观看| 国产免费av电影| 波多野结衣91| 一区二区三区四区视频在线| 2020国产在线| 欧美日韩精品一区二区三区四区 | 99精品免费观看| 99精品国产视频| 中文字幕色一区二区| 狠狠操一区二区三区| 欧美精品 日韩| 免费在线观看成年人视频| 天天做天天爱综合| 欧美专区日韩视频| 国产偷人妻精品一区二区在线| 91碰在线视频| 午夜啪啪免费视频| 中文字幕在线中文字幕在线中三区| 欧美日韩国产小视频| 亚洲精品在线视频免费观看| 国产精品99在线观看| 97人人模人人爽人人喊中文字 | 成人影院大全| 欧美xxxx老人做受| 激情五月激情综合| 玖玖精品视频| 国产精品一区二区三区观看| 超碰在线观看免费| 在线观看日韩国产| 亚洲狠狠婷婷综合久久久久图片| 欧美伊人久久| 国产免费一区二区三区在线能观看 | 在线播放日本| 日韩欧美在线视频观看| 无码国产精品一区二区免费式直播| 欧美成人激情| 国产精品激情av电影在线观看 | 中文字字幕在线中文乱码| 不卡视频一二三四| av在线com| 狂野欧美xxxx韩国少妇| 色婷婷综合成人av| 欧美成人精品网站| 久久久精品国产免费观看同学| av无码久久久久久不卡网站| 日本一区二区三区播放| 久久视频中文字幕| 国产精品无码天天爽视频| 中文字幕乱码日本亚洲一区二区| 男女av免费观看| 亚洲妇女av| 欧美一级黑人aaaaaaa做受| 人妻夜夜爽天天爽| 亚洲成av人影院在线观看网| 涩视频在线观看| 好吊一区二区三区| 国产精品手机在线| 91福利在线尤物| 亚洲成人精品av| 日韩免费黄色片| 99热在这里有精品免费| 毛片在线播放视频| 美女主播精品视频一二三四| 国产91精品久久久| 久草福利在线| 欧美色网站导航| 免费看一级黄色| 狠狠网亚洲精品| 4444在线观看| 国产成人高清精品免费5388| 97精品国产91久久久久久| 熟妇高潮一区二区三区| 欧美性xxxx极品hd满灌| 影音先锋男人在线| 国产制服丝袜一区| 久久久久久久9| 欧美男男freegayvideosroom| 欧美一级视频在线观看| 国产午夜视频在线观看| 欧美丝袜自拍制服另类| 91精品国产闺蜜国产在线闺蜜| 大桥未久av一区二区三区中文| 福利视频一区二区三区四区| 妖精一区二区三区精品视频 | 国产精品伦一区二区三区| 亚洲欧美日韩久久| 日韩www视频| 丝袜亚洲精品中文字幕一区| 99精品视频网站| 风间由美一区二区av101 | 国产高清视频一区二区| 久久久久中文字幕2018| 免费在线黄色影片| 欧美一区二区免费视频| 日产欧产va高清| 国产精品私房写真福利视频| 成年人看片网站| 天堂成人免费av电影一区| 中文字幕一区二区三区四区五区| 国产精品高潮呻吟久久久久| 国产国产精品人在线视| 中文字幕中文字幕在线中高清免费版| 亚洲国产精品一区二区三区| 亚洲一区二区三区网站| 午夜在线成人av| 国产精品夜夜夜爽阿娇| 99精品视频免费在线观看| www.se五月| 亚洲精品偷拍| 视频一区二区视频| 久草成人在线| 成人免费观看网站| 精品久久福利| 26uuu国产精品视频| 嫩草香蕉在线91一二三区| 日韩激情视频在线播放| 国产夫妻性生活视频| 91福利小视频| 日本一级黄色大片| **性色生活片久久毛片| 97人妻精品一区二区三区免| 国产精品亚洲视频| 久久久久久久久久久久91| 中日韩男男gay无套| 成人在线观看www| 成久久久网站| 免费在线国产精品| 国产日韩三级| wwwxx欧美| 亚洲国产精选| 国产噜噜噜噜噜久久久久久久久 | 第一福利永久视频精品| 久久久久久久久艹| 中文字幕视频一区| 99国产精品免费| 久久你懂得1024| 亚洲精品国产成人av在线| 国产精品18久久久久久久久| 一级做a免费视频| 久久国产生活片100| 天堂中文视频在线| 久久久久久网| aa免费在线观看| 国产色综合网| 久久久999免费视频| 在线播放不卡| 黄页免费在线观看视频| 国精品一区二区| 五月天激情图片| 欧美日韩一区二区高清| 超薄肉色丝袜足j调教99| 亚洲有吗中文字幕| 丰满人妻一区二区三区53号| 在线看片不卡| 亚洲中文字幕无码一区二区三区 | 欧美丰满少妇xxxxx做受| 国产在线更新| 欧美老肥婆性猛交视频| 污污视频在线看| 色综合久久88色综合天天看泰| 羞羞的网站在线观看| 久久久女人电视剧免费播放下载| 国产精品69xx| 97人人做人人爱| 亚洲人成在线网站| 国产va免费精品高清在线| av一区在线| 成人天堂噜噜噜| 日日夜夜精品视频| 国产精品一区二区欧美| 亚洲区小说区| 亚洲欧美日韩精品综合在线观看| 欧美成人直播| a级片一区二区| 中文在线不卡| 国产自偷自偷免费一区| 蜜臀av在线播放一区二区三区| 91视频这里只有精品| 岛国av在线一区| 巨胸大乳www视频免费观看| 亚洲国产精品精华液2区45| 日本 欧美 国产| 依依成人精品视频| 国产婷婷色一区二区在线观看| 欧美性猛交xxxx乱大交退制版| 国产日产亚洲系列最新| 亚洲国产日韩欧美在线图片| 国产日韩精品在线看| 久久深夜福利免费观看| www.youjizz.com在线| 国产精品久久久久久久天堂 | 天堂在线一区二区| 激情文学亚洲色图| 不卡高清视频专区| 蜜桃av免费观看| 亚洲成av人片| 日批视频免费观看| 精品国产乱码久久久久久牛牛| 国产在线播放av| 蜜臀久久99精品久久久无需会员 | 国产在线高清理伦片a| 91精品国产高清久久久久久| 欧美日韩伦理一区二区| 成人免费看片网址| 久久亚洲专区| 日本毛片在线免费观看| 国产原创一区二区三区| 91中文字幕永久在线| 一区二区欧美视频| 中文字幕乱码视频| 亚洲精品动漫久久久久| 免费网站黄在线观看| 国产91对白在线播放| 一区二区三区自拍视频| 婷婷久久伊人| 亚洲深夜影院| 中文字幕在线视频一区二区| 国产视频一区二区在线观看| 久久亚洲国产成人精品性色| 欧美日韩中文字幕一区二区| 天堂91在线| 欧美—级高清免费播放| 在线欧美激情| 亚欧精品在线| 视频一区二区不卡| av黄色一级片| 玉米视频成人免费看| 亚洲天堂网视频| 亚洲欧美中文另类| 免费在线小视频| 国产精品sss| 欧美另类视频| 亚洲综合123| 国产精品国产三级国产三级人妇 | 97在线观看免费高| 在线观看免费成人| 玖玖综合伊人| 国产成人精品久久久| 亚洲国产精品嫩草影院久久av| 轻点好疼好大好爽视频| 久久精品99久久久| xxxxx99| 色综合久久中文综合久久牛| 人妻无码一区二区三区久久99 | 亚洲美女久久久| 小视频免费在线观看| 国产另类自拍| 亚洲国产片色| 日本三级日本三级日本三级极| 亚洲自拍偷拍av| 精品人妻一区二区三区含羞草| 久久伊人91精品综合网站| 亚洲精品777| 久久免费一级片| 成人午夜av电影| 香蕉免费毛片视频| 日韩h在线观看| av日韩亚洲| 欧美日韩系列| 日本中文字幕不卡| 又色又爽的视频| 7777精品伊人久久久大香线蕉 | 一区二区在线免费观看视频| 一区二区在线免费| 亚洲黄色在线观看视频| 羞羞色国产精品| 伊人久久大香线蕉av不卡| 国产精品igao| 亚洲欧美日韩国产综合| 狠狠人妻久久久久久综合麻豆| 久久久最新网址| 精品一区欧美| 中文字幕亚洲乱码| 一区二区三区中文字幕在线观看| 免费观看国产视频| 人人爽久久涩噜噜噜网站| 成人情趣视频网站| 一级片黄色免费| 欧美午夜激情视频| 黄网在线观看| 国产精品视频免费在线观看| 欧美/亚洲一区| 精品少妇一区二区三区免费观 | 韩国av电影在线观看| 欧美做受高潮电影o| 久久国产成人精品| 国产乱淫av麻豆国产免费| 一本到不卡免费一区二区| 伊人免费在线| 国内精品久久久久久久果冻传媒| 久久先锋影音| 色在线观看视频| 亚洲欧美国产视频| 91国产一区| 黑人糟蹋人妻hd中文字幕| 中文字幕日韩精品一区| 色综合免费视频| 国产精品视频一区二区三区四| 国产一区激情| 人人妻人人澡人人爽| 欧美大片在线观看一区| 亚洲www.| 欧美一级免费播放| 国产精品国产三级国产专播品爱网| 天天色天天操天天射| 成人在线观看视频网站| 久久成人免费|