国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

初學(xué)Java多線程:使用Synchronized塊同步方法

開發(fā) 后端
在使用Java多線程中會(huì)需要使用Synchronized塊同步方法。我們不僅可以通過synchronized塊來同步一個(gè)對(duì)象變量。也可以使用synchronized塊來同步類中的靜態(tài)方法和非靜態(tài)方法。

synchronized關(guān)鍵字有兩種用法。第一種就是在《使用Synchronized關(guān)鍵字同步類方法》一文中所介紹的直接用在方法的定義中。另外一種就是synchronized塊。我們不僅可以通過synchronized塊來同步一個(gè)對(duì)象變量。也可以使用synchronized塊來同步類中的靜態(tài)方法和非靜態(tài)方法。

synchronized塊的語法如下:

  1. public void method()  
  2. {  
  3.     … …  
  4.     synchronized(表達(dá)式)  
  5.     {  
  6.         … …  
  7.     }  

一、非靜態(tài)類方法的同步   

從《使用Synchronized關(guān)鍵字同步類方法》一文中我們知道使用synchronized關(guān)鍵字來定義方法就會(huì)鎖定類中所有使用synchronzied關(guān)鍵字定義的靜態(tài)方法或非靜態(tài)方法,但這并不好理解。而如果使用synchronized塊來達(dá)到同樣的效果,就不難理解為什么會(huì)產(chǎn)生這種效果了。如果想使用synchronized塊來鎖定類中所有的同步非靜態(tài)方法,需要使用this做為synchronized塊的參數(shù)傳入synchronized塊國,代碼如下:

通過synchronized塊同步非靜態(tài)方法

  1. public class SyncBlock  
  2.  {  
  3.       public void method1()  
  4.       {  
  5.           synchronized(this)  // 相當(dāng)于對(duì)method1方法使用synchronized關(guān)鍵字  
  6.           {  
  7.               … …  
  8.           }  
  9.       }  
  10.       public void method2()  
  11.       {  
  12.           synchronized(this)  // 相當(dāng)于對(duì)method2方法使用synchronized關(guān)鍵字  
  13.           {  
  14.               … …  
  15.           }  
  16.       }  
  17.       public synchronized void method3()    
  18.       {  
  19.           … …  
  20.       }  
  21.   } 

在上面的代碼中的method1和method2方法中使用了synchronized塊。而第017行的method3方法仍然使用synchronized關(guān)鍵字來定義方法。在使用同一個(gè)SyncBlock類實(shí)例時(shí),這三個(gè)方法只要有一個(gè)正在執(zhí)行,其他兩個(gè)方法就會(huì)因未獲得同步鎖而被阻塞。在使用synchronized塊時(shí)要想達(dá)到和synchronized關(guān)鍵字同樣的效果,必須將所有的代碼都寫在synchronized塊中,否則,將無法使當(dāng)前方法中的所有代碼和其他的方法同步。

除了使用this做為synchronized塊的參數(shù)外,還可以使用SyncBlock.this作為synchronized塊的參數(shù)來達(dá)到同樣的效果。

在內(nèi)類(InnerClass)的方法中使用synchronized塊來時(shí),this只表示內(nèi)類,和外類(OuterClass)沒有關(guān)系。但內(nèi)類的非靜態(tài)方法可以和外類的非靜態(tài)方法同步。如在內(nèi)類InnerClass中加一個(gè)method4方法,并使method4方法和SyncBlock的三個(gè)方法同步,代碼如下:

使內(nèi)類的非靜態(tài)方法和外類的非靜態(tài)方法同步

  1. public class SyncBlock  
  2. {  
  3.     … …  
  4.     class InnerClass  
  5.     {  
  6.         public void method4()  
  7.         {  
  8.             synchronized(SyncBlock.this)  
  9.             {  
  10.                 … …   
  11.             }  
  12.         }  
  13.     }  
  14.     … …  

在上面SyncBlock類的新版本中,InnerClass類的method4方法和SyncBlock類的其他三個(gè)方法同步,因此,method1、method2、method3和method4四個(gè)方法在同一時(shí)間只能有一個(gè)方法執(zhí)行。

Synchronized塊不管是正常執(zhí)行完,還是因?yàn)槌绦虺鲥e(cuò)而異常退出synchronized塊,當(dāng)前的synchronized塊所持有的同步鎖都會(huì)自動(dòng)釋放。因此,在使用synchronized塊時(shí)不必?fù)?dān)心同步鎖的釋放問題。

二、靜態(tài)類方法的同步

由于在調(diào)用靜態(tài)方法時(shí),對(duì)象實(shí)例不一定被創(chuàng)建。因此,就不能使用this來同步靜態(tài)方法,而必須使用Class對(duì)象來同步靜態(tài)方法。代碼如下:

通過synchronized塊同步靜態(tài)方法

  1. public class StaticSyncBlock  
  2.   {  
  3.       public static void method1()  
  4.       {  
  5.           synchronized(StaticSyncBlock.class)    
  6.           {  
  7.               … …  
  8.           }  
  9.       }  
  10.       public static synchronized void method2()    
  11.       {  
  12.           … …  
  13.       }  
  14.   } 

在同步靜態(tài)方法時(shí)可以使用類的靜態(tài)字段class來得到Class對(duì)象。在上例中method1和method2方法同時(shí)只能有一個(gè)方法執(zhí)行。除了使用class字段得到Class對(duì)象外,還可以使用實(shí)例的getClass方法來得到Class對(duì)象。上例中的代碼可以修改如下:

使用getClass方法得到Class對(duì)象

  1. public class StaticSyncBlock  
  2. {  
  3.     public static StaticSyncBlock instance;   
  4.     public StaticSyncBlock()  
  5.     {  
  6.         instance = this;  
  7.     }  
  8.     public static void method1()  
  9.     {  
  10.        synchronized(instance.getClass())  
  11.        {  
  12.               
  13.        }  
  14.     }  
  15.        
  16. }  

在上面代碼中通過一個(gè)public的靜態(tài)instance得到一個(gè)StaticSyncBlock類的實(shí)例,并通過這個(gè)實(shí)例的getClass方法得到了Class對(duì)象(一個(gè)類的所有實(shí)例通過getClass方法得到的都是同一個(gè)Class對(duì)象,因此,調(diào)用任何一個(gè)實(shí)例的getClass方法都可以)。我們還可以通過Class對(duì)象使不同類的靜態(tài)方法同步,如Test類的靜態(tài)方法method和StaticSyncBlock類的兩個(gè)靜態(tài)方法同步,代碼如下:

Test類的method方法和StaticSyncBlock類的method1、method2方法同步

  1. public class Test  
  2. {  
  3.     public static void method()  
  4.     {  
  5.         synchronized(StaticSyncBlock.class)  
  6.         {  
  7.                
  8.         }  
  9.     }  

注意:在使用synchronized塊同步類方法時(shí),非靜態(tài)方法可以使用this來同步,而靜態(tài)方法必須使用Class對(duì)象來同步。它們互不影響。當(dāng)然,也可以在非靜態(tài)方法中使用Class對(duì)象來同步靜態(tài)方法。但在靜態(tài)方法中不能使用this來同步非靜態(tài)方法。這一點(diǎn)在使用synchronized塊同步類方法時(shí)應(yīng)注意。

【編輯推薦】

  1. 初學(xué)Java多線程:使用Synchronized關(guān)鍵字同步類方法
  2. 初學(xué)Java多線程:從線程返回?cái)?shù)據(jù)的兩種方法
  3. 初學(xué)Java多線程:向線程傳遞數(shù)據(jù)的三種方法
  4. 初學(xué)Java多線程:慎重使用volatile關(guān)鍵字
  5. 初學(xué)Java多線程:join方法的使用
責(zé)任編輯:yangsai 來源: 真的有外星人嗎
相關(guān)推薦

2009-06-29 18:44:28

Java多線程Synchronize同步變量

2009-06-29 18:26:11

Java多線程Synchronize同步類

2011-04-14 13:27:53

Synchronize多線程

2009-06-29 18:08:51

Java多線程join方法

2009-06-29 18:00:05

Java多線程Runnable接口創(chuàng)建線程

2009-06-29 17:49:47

Java多線程

2009-06-29 18:14:23

Java多線程volatile關(guān)鍵字

2015-09-10 09:30:54

Java多線程同步

2009-06-29 18:22:54

Java多線程從線程返回?cái)?shù)據(jù)

2009-06-29 18:03:15

Java多線程線程的生命周期

2009-06-29 17:54:10

Java多線程Thread類創(chuàng)建線程

2009-06-29 18:18:53

Java多線程向線程傳遞數(shù)據(jù)

2010-01-21 11:27:30

linux多線程機(jī)制線程同步

2022-07-07 00:33:34

Java線程同步

2017-05-27 20:59:30

Java多線程synchronize

2023-12-08 18:01:25

Java關(guān)鍵字

2009-08-12 13:37:01

Java synchr

2009-11-13 15:46:25

Java多線程

2010-03-15 19:37:00

Java多線程同步

2015-07-22 09:51:51

iOS開發(fā)線程
點(diǎn)贊
收藏

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

欧美一区二区人人喊爽| 亚洲欧美综合另类中字| 成人黄色免费| 亚洲成人一区在线| 亚洲成人影院麻豆| 亚洲福利视频在线| 精品一区91| 国产做受高潮69| 欧美啪啪一区| 国产一区二区视频播放| 一区二区三区精品在线| 影音先锋中文在线视频| 久久影视电视剧免费网站清宫辞电视| 婷婷激情久久| 97超碰免费观看| 激情成人中文字幕| 日韩精品专区| 成人免费视频网| 久久久综合精品| 电影av一区| 欧美高清在线播放| 亚洲欧美日韩视频二区| 国内福利写真片视频在线| 亚洲国产日韩欧美综合久久| 日韩美女国产精品| 国产盗摄视频在线观看| 色妞www精品视频| 二区三区精品| 日本高清xxxx| 日韩久久久精品| 中出一区二区| 国产黄色免费网| 欧美成人激情视频| 国产一区二区在线看| 国产黄色在线| 91国产丝袜在线放| 亚洲美腿欧美偷拍| 精品国产乱子伦一区二区| 91国视频在线| 日韩精品在线电影| av不卡免费看| 国产精品秘入口| 亚洲wwwav| 亚洲成人免费在线| 国产一区二区三区四区五区传媒| 亚欧激情乱码久久久久久久久| 色av中文字幕一区| 国产一区二区成人久久免费影院| 蜜臀av国内免费精品久久久夜夜| 久久久久网址| 日韩欧美一卡二卡| 成人一区二区三区视频 | 欧美日韩三级视频| 欧美永久精品| 性欧美videoshd高清| 中文字幕精品一区日韩| 亚洲精品福利视频| 久久爱另类一区二区小说| 在线天堂新版最新版在线8| 中文字幕日韩精品久久| 亚洲一区二区黄| 国产欧美久久久精品影院| 美女毛片一区二区三区四区| 中文字幕在线第一页| 欧美一级片免费观看| 伊人男人综合视频网| 国产精品国产三级国产普通话蜜臀| 婷婷成人综合| 日本精品600av| www.com黄色片| 久久久一本精品99久久精品| 亚洲欧美日韩区| 国产精品女上位| 日韩电影网1区2区| 红杏aⅴ成人免费视频| 秋霞影院午夜丰满少妇在线视频| 日韩少妇内射免费播放| 国产嫩草一区二区三区在线观看| 日韩精品福利在线| 欧美日韩视频免费播放| 国产欧美精品国产国产专区| 亚洲精品美女91| 精品一区二区三区视频在线播放| 男人天堂手机在线| aaa免费看大片| 男女激情无遮挡| 亚洲精美视频| 亚洲综合在线小说| 欧美极品少妇xxxxⅹ免费视频| 欧美精品日日鲁夜夜添| 亚洲成人免费视频| 久久综合久久99| 国产精品一区二区久激情瑜伽| 香蕉视频官网在线观看日本一区二区| 黄色成人在线观看网站| 一级日本在线| 最新在线地址| 午夜免费啪视频观看视频| 99热播在线观看| 欧美日韩亚洲第一| 男女日批视频在线观看| 超级碰在线观看| 最新视频 - x88av| 欧美一级爽aaaaa大片| 3d蒂法精品啪啪一区二区免费| 97国产suv精品一区二区62| 日韩在线观看视频免费| 亚洲视频视频在线| 亚洲视频精品在线| 综合久久五月天| 久久高清视频免费| 欧美激情奇米色| 日韩美女av在线免费观看| 国产不卡一区二区在线播放| 日本成人免费在线| 91福利视频导航| 日本一区美女| 水蜜桃色314在线观看| 欧美精品无码一区二区三区| 99热热99| 成年人免费在线视频| 色综合久久影院| 青春草免费在线视频| 日韩制服诱惑| 美女亚洲一区| 色婷婷综合网| 国产视频一区三区| 成人精品国产免费网站| 一区二区三区美女| 欧美三级欧美一级| 亚洲欧美国产精品久久久久久久| 欧美人与性动交| 成人深夜直播免费观看| 欧美成人一区二区在线| 亚洲一区二区三区av无码| 国产国产国产国产国产国产| 欧美18一19xxx性| 深夜激情久久| 首页亚洲欧美制服丝腿| 18成人在线观看| 欧美一级淫片007| 久久久精品视频成人| 3d动漫精品啪啪一区二区三区免费| av动漫免费观看| 一本久久a久久精品亚洲| 欧美日韩亚洲精品一区二区三区 | 成人福利片网站| **日韩最新| 视频一区在线视频| 亚洲精选在线视频| 亚洲天堂日韩电影| 国产精品一区久久久| 国产资源在线视频| av资源网站在线观看| 视频小说一区二区| 日本欧美一区二区三区| 综合网在线视频| 精品一区二区三区三区| 91精品久久久久久久| 91日韩视频在线观看| 性欧美18xxxhd| 91久久亚洲| 色综合视频在线观看| 26uuu另类亚洲欧美日本老年| 伊人久久99| 欧洲黄色一区| 亚洲午夜91| 一本高清dvd不卡在线观看| 91精品国产高清久久久久久| 精品国产一二三四区| 成人涩涩视频| 99久免费精品视频在线观看 | 国产精品一线| 国产网站一区二区| 精品国产一区av| 人妻夜夜添夜夜无码av| 456成人影院在线观看| 国产不卡在线播放| 中文字幕精品网| 国产自产在线视频| 成人在线视频www| 综合激情成人伊人| 国产精品久久久久久久久久久久久| 激情五月色综合亚洲小说| 超碰97久久| 亚洲自拍偷拍图区| 成人写真福利网| a级网站在线播放| 狠狠色丁香婷综合久久| www.亚洲一区| 草裙成人精品一区二区三区| 亚洲三级精品| 黑人巨大精品欧美一区二区一视频| 国产经典一区二区三区| 波多一区二区| 国产精品你懂的在线| 国产精品对白刺激久久久| 日韩欧美看国产| 亚洲综合精品自拍| 青青视频免费在线|