亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java多線程編程之使用Synchronized塊同步方法

2019-11-26 15:43:52
字體:
來源:轉載
供稿:網友

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

復制代碼 代碼如下:

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

一、非靜態類方法的同步 

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

復制代碼 代碼如下:

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

在上面的代碼中的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塊同步類方法時應注意。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩www在线| 日韩高清电影免费观看完整版| 亚洲精品日韩激情在线电影| 亚洲人成电影网站色www| 日韩在线激情视频| 色系列之999| 操人视频在线观看欧美| 欧美性高跟鞋xxxxhd| 色在人av网站天堂精品| 日韩在线观看免费全集电视剧网站| 久久久久久18| 久久精品国产精品| 国产亚洲精品久久久久动| 日韩免费电影在线观看| 亚洲美女av黄| 影音先锋欧美精品| 国产精品爱啪在线线免费观看| 2018日韩中文字幕| 国产精品久久久久久搜索| 亚洲高清免费观看高清完整版| 亚洲欧美国产一本综合首页| 亚洲欧美一区二区三区久久| 久久影院中文字幕| 欧美大片免费观看在线观看网站推荐| 韩国三级日本三级少妇99| 久久久国产精品免费| 欧美激情一级欧美精品| 57pao国产精品一区| 人九九综合九九宗合| 欧美日韩国产成人在线| 国产成人激情小视频| 国产精品网红直播| 色综合久久中文字幕综合网小说| 精品久久在线播放| 亚洲免费一级电影| 国产精品高潮粉嫩av| 欧美日韩国产丝袜另类| 青青草成人在线| 亚洲天堂免费观看| 亚洲第一精品福利| 456亚洲影院| 亚洲一二三在线| 欧美激情二区三区| 4438全国成人免费| 国产精品久久久久久久9999| 欧美超级免费视 在线| 国产精品久久久久久久久男| 久久久国产视频91| 国产精品久久久久久久久久东京| 国产免费一区二区三区在线能观看| 久久天天躁狠狠躁老女人| 亚洲第一福利网| 国产精品一区二区久久久| 亚洲japanese制服美女| 国产免费一区二区三区在线观看| 欧美丰满少妇xxxxx做受| 亚洲有声小说3d| 97国产精品免费视频| 久久中文字幕一区| 福利精品视频在线| 久久99热这里只有精品国产| 深夜福利一区二区| 亚洲人成电影网站色www| 国产精品视频中文字幕91| 日韩一区二区三区国产| 久久精品免费播放| 欧美高跟鞋交xxxxxhd| 国产精品久久婷婷六月丁香| 久久久国产精彩视频美女艺术照福利| 日本精品va在线观看| 精品露脸国产偷人在视频| 国产99视频精品免视看7| 欧美成人免费小视频| 欧美在线视频观看免费网站| 国产精品人成电影| 亚洲欧洲一区二区三区久久| 正在播放亚洲1区| 国产精品久久久久久久久男| 亚洲欧美在线看| 精品国产乱码久久久久酒店| 亚洲欧洲一区二区三区久久| 欧美成人一区二区三区电影| 国产xxx69麻豆国语对白| 日本中文字幕成人| 成人久久一区二区三区| 91在线视频一区| 91夜夜未满十八勿入爽爽影院| 久久精品中文字幕| 中文字幕一区二区三区电影| 欧美激情一级欧美精品| 秋霞成人午夜鲁丝一区二区三区| 欧美最猛性xxxx| 国产精品久久久久久久久久久不卡| 亚洲欧美另类人妖| 国产91精品久久久| 久久久久久久久久av| 精品国产依人香蕉在线精品| www.久久草.com| 97视频在线观看播放| 国产人妖伪娘一区91| 成人黄色av网| 日韩在线观看高清| 精品久久久久久久久久久| 国产精品激情av电影在线观看| 九色成人免费视频| 欧美视频在线免费看| 欧美日韩亚洲成人| 538国产精品视频一区二区| 成人免费黄色网| 97视频色精品| 国产精品高潮呻吟久久av野狼| xvideos亚洲人网站| 国产婷婷色综合av蜜臀av| 国产精品第1页| 亚洲美腿欧美激情另类| 国产精品一区=区| 中文字幕久热精品视频在线| 国产一区二区在线免费视频| 欧美中文字幕在线播放| 亚洲欧美另类中文字幕| 国产精品久久91| 精品中文视频在线| 91久久精品在线| 91午夜理伦私人影院| 成人有码视频在线播放| 国产成人精品综合久久久| 欧美成aaa人片免费看| 中文字幕v亚洲ⅴv天堂| 国产日韩欧美日韩大片| 北条麻妃久久精品| 久久全国免费视频| 欧美日韩中文在线观看| 国产精品视频大全| 中文字幕一区二区精品| 欧美老女人www| 成人a在线观看| 国产精品爱久久久久久久| 97超级碰碰人国产在线观看| 国产日韩欧美视频| 国产美女被下药99| 亚洲桃花岛网站| 国内精品久久久| 中文字幕日韩在线播放| 久久精品福利视频| 欧美午夜激情视频| 久久久久免费精品国产| 狠狠躁夜夜躁人人爽天天天天97| 亚洲国产成人av在线| 精品国偷自产在线视频| 国产精品国模在线| 色综合天天综合网国产成人网| 在线视频欧美日韩精品| 日韩精品一二三四区| 这里只有精品久久| 国产精品美乳一区二区免费| 97av在线影院| 精品国内自产拍在线观看| 日韩一区二区在线视频| 国产亚洲美女精品久久久| 不用播放器成人网| 欧美大片大片在线播放| 欧美色道久久88综合亚洲精品| 清纯唯美日韩制服另类| 91在线精品播放|