欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

使用Synchronized塊同步方法

系統 1789 0

轉載: http://java.chinaitlab.com/line/779789_2.html

?

?

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

??? synchronized塊的語法如下:

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

??? 一、非靜態類方法的同步

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

??? 通過synchronized塊同步非靜態方法

?? 001 ?? public ? class ?SyncBlock
??
002 ??{
??
003 ?????? public ? void ?method1()
??
004 ??????{
??
005 ?????????? synchronized ( this )?? // ?相當于對method1方法使用synchronized關鍵字
?? 006 ??????????{
??
007 ??????????????…?…
??
008 ??????????}
??
009 ??????}
??
010 ?????? public ? void ?method2()
??
011 ??????{
??
012 ?????????? synchronized ( this )?? // ?相當于對method2方法使用synchronized關鍵字
?? 013 ??????????{
??
014 ??????????????…?…
??
015 ??????????}
??
016 ??????}
??
017 ?????? public ? synchronized ? void ?method3()??
??
018 ??????{
??
019 ??????????…?…
??
020 ??????}
??
021 ??}

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

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

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

??? 使內類的非靜態方法和外類的非靜態方法同步

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

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

??? Synchronized塊不管是正常執行完,還是因為程序出錯而異常退出synchronized塊,當前的synchronized塊所持有的同步鎖都會自動釋放。因此,在使用synchronized塊時不必擔心同步鎖的釋放問題。

?

二、靜態類方法的同步

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

??? 通過synchronized塊同步靜態方法

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

??? 在同步靜態方法時可以使用類的靜態字段class來得到Class對象。在上例中method1和method2方法同時只能有一個方法執行。除了使用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的靜態instance得到一個StaticSyncBlock類的實例,并通過這個實例的getClass方法得到了Class對象(一個類的所有實例通過getClass方法得到的都是同一個Class對象,因此,調用任何一個實例的getClass方法都可以)。我們還可以通過Class對象使不同類的靜態方法同步,如Test類的靜態方法method和StaticSyncBlock類的兩個靜態方法同步,代碼如下:

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

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

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

使用Synchronized塊同步方法


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲第一区第二区 | 久久久www视频 | 99视频在线观看精品 | 日韩欧美精品在线 | 久久美女视频 | 中文二区| 欧美一区二区精品 | 蜜桃视频在线播放 | 九九黄色 | 亚洲欧美日韩在线中文一 | 一级免费黄色免费片 | 日日夜夜天天人人 | 99久久99| 欧美高清第一页 | 久草中文字 | 亚洲精品不卡久久久久久 | www.ouchn.com| 天天看逼 | 日韩欧美中文在线 | 亚洲精品自拍 | 色欲AV久久一区二区三区 | 99这里只有精品66视频 | 色爱阁| 日本大学生免费一级一片 | 欧美黄色一级 | 日韩三级网| 色悠久久久久综合欧美99 | 亚洲国产精品日韩高清秒播 | 久久精品一区二区三区四区 | 欧美日本一道高清二区三区 | 亚洲欧美在线免费观看 | 亚洲精品在线视频观看 | 久久久久久久免费视频 | 波多久久夜色精品国产 | 亚洲国产欧美在线人网站 | 黄色影视大全 | 奇米网色 | 波多野结衣免费视频观看 | 97网站| 91免费永久国产在线观看 | 精品一区亚洲 |