你可以这样理解,synchronized关键字有两种用法。第一种就是在《使用Synchronized关键字同步类方法》一文中所介绍的直接用在方法的定义中。另外一种就是synchronized块。我们不仅可以通过synchronized块来同步一个对象变量。也可以使用synchronized块来同步类中的静态方法和非静态方法。
synchronized块的语法如下:
public void method()
{
… …
synchronized(表达式)
{
… …
}
}
通过synchronized块同步非静态方法
public class SyncBlock
{
public void method1()
{
synchronized(this) // 相当于对method1方法使用synchronized关键字
{
… …
}
}
public void method2()
{
synchronized(this) // 相当于对method2方法使用synchronized关键字
{
… …
}
}
public synchronized void method3()
{
… …
}
}
通过synchronized块同步静态方法
public class StaticSyncBlock
{
public static void method1()
{
synchronized(StaticSyncBlock.class)
{
… …
}
}
public static synchronized void method2()
{
… …
}
}
希望你能明白这两种情况! |