日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Synchronized块同步方法

發(fā)布時間:2024/10/12 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Synchronized块同步方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

synchronized塊的語法如下:

public void method() { … … synchronized(表達式) { … … } }

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

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

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

public class SyncBlock { public void method1() { synchronized(this) // 相當(dāng)于對method1方法使用synchronized關(guān)鍵字 { … … } } public void method2() { synchronized(this) // 相當(dāng)于對method2方法使用synchronized關(guān)鍵字 { … … } } public synchronized void method3() { … … } }

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

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

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

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

public class SyncBlock { … … class InnerClass { public void method4() { synchronized(SyncBlock.this) { … … } } } … … }

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

Synchronized塊不管是正常執(zhí)行完,還是因為程序出錯而異常退出synchronized塊,當(dāng)前的synchronized塊所持有的同步鎖都會自動釋放。

因此,在使用synchronized塊時不必擔(dān)心同步鎖的釋放問題。

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

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

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

public class StaticSyncBlock { public static void method1() { synchronized(StaticSyncBlock.class) { … … } } public static synchronized void method2() { … … } }

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

使用getClass方法得到Class對象

public class StaticSyncBlock { public static StaticSyncBlock instance; public StaticSyncBlock() { instance = this; } public static void method1() { synchronized(instance.getClass()) { } } }

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

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

public class Test { public static void method() { synchronized(StaticSyncBlock.class) { } } }

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

轉(zhuǎn)載于:https://www.cnblogs.com/yuyu666/p/9741434.html

總結(jié)

以上是生活随笔為你收集整理的使用Synchronized块同步方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情av | 69av在线视频| 欧美日韩在线视频观看 | 国产精品破处 | 免费精品视频在线 | 国产91看片| 男女视频在线 | 人乳videos巨大吃奶 | 国产精品国产精品国产专区不片 | 亚洲av无码一区二区乱子伦 | 国产自产 | 国产一级爱 | 肉色丝袜脚交一区二区 | 99视频 | 91网站免费在线观看 | 国产在线999 | 欧美黄色小说视频 | 亚洲一区激情 | 免费在线观看黄色网址 | 亚洲免费三级 | 97精品一区二区 | 天天欧美 | 中文字幕一区二区在线老色批影视 | www日本xxx| 欧美天堂网站 | 古装做爰无遮挡三级聊斋艳谭 | 国产伦精品一区二区三区照片 | 中文字幕在线视频网 | 日韩精品一区二区三区 | 欧美日韩性 | 视色av| 特级一级片 | 我要看18毛片 | 在线观看av一区二区 | 欧美成人福利视频 | 黄色片子网站 | 三女警花合力承欢猎艳都市h | 色一情一区二 | 欧美一区二区成人 | 久久久久久久极品 | 久久久久久夜 | 天天干夜夜艹 | 偷偷操av| 中文字幕在线观看一区二区三区 | 久久久久亚洲精品国产 | 少妇被躁爽到高潮无码文 | 色悠悠网址| 在线中文字幕av | 色老头av| 高潮喷水一区二区三区 | 黄色av国产| 久久影音 | 久久人人爽爽人人爽人人片av | 男女黄床上色视频免费的软件 | 韩国午夜激情 | 欧美人xxxx| 日韩在线一区视频 | 日本艳妇| 激情综合网av | 日本在线天堂 | 色婷婷精品国产一区二区三区 | 丰满岳妇乱一区二区三区 | 日日色av| 少妇性bbb搡bbb爽爽爽欧美 | 五月天精品在线 | 少妇色| 激情视频一区二区三区 | 在线观看成人动漫 | 911福利视频 | 亚洲一区二区三区在线看 | 日韩在线一卡二卡 | 天天草综合 | 午夜激情免费 | 国产不卡毛片 | 欧美色综合天天久久综合精品 | 欧美放荡性医生videos | 日韩成人一区二区视频 | 操碰在线观看 | 国产精品久久久久久免费观看 | 美女露胸软件 | 成人动漫免费在线观看 | 国产成人精品一区二区三区无码熬 | h片在线观看免费 | 波多野结衣潜藏淫欲 | 国产免费看 | 欧美性大战xxxxx久久久 | 国产精美视频 | 视频一区二区三区精品 | 久久久久中文 | 久久国产精品精品国产色婷婷 | 久久久久九九 | 秋霞综合网 | 午夜时刻免费入口 | 亚洲一区二区三区四区在线 | 美女大bxxxxn内射 | av综合网站 | 欧美一级久久 | 少女情窦初开的第4集在线观看 | 国产一区二区三区视频在线播放 |