synchronized關鍵字有兩種用法
synchronized塊的語法如下
public void method()
{
… …
synchronized(表達式)
{
… …
}
}
一
從《使用Synchronized關鍵字同步類方法》一文中我們知道使用synchronized關鍵字來定義方法就會鎖定類中所有使用synchronzied關鍵字定義的靜態方法或非靜態方法
通過synchronized塊同步非靜態方法
在上面的代碼中的method
除了使用this做為synchronized塊的參數外
在內類(InnerClass)的方法中使用synchronized塊來時
使內類的非靜態方法和外類的非靜態方法同步
public class SyncBlock
{
… …
class InnerClass
{
public void method
{
synchronized(SyncBlock
{
… …
}
}
}
… …
}
在上面SyncBlock類的新版本中
Synchronized塊不管是正常執行完
二
由於在調用靜態方法時
通過synchronized塊同步靜態方法
public class StaticSyncBlock
{
public static void method
{
synchronized(StaticSyncBlock
{
… …
}
}
public static synchronized void method
{
… …
}
}
在同步靜態方法時可以使用類的靜態字段class來得到Class對象
使用getClass方法得到Class對象
public class StaticSyncBlock
{
public static StaticSyncBlock instance;
public StaticSyncBlock()
{
instance = this;
}
public static void method
{
synchronized(instance
{
}
}
}
在上面代碼中通過一個public的靜態instance得到一個StaticSyncBlock類的實例
Test類的method方法和StaticSyncBlock類的method
public class Test
{
public static void method()
{
synchronized(StaticSyncBlock
{
}
}
}
注意
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27347.html