4

假设我的Foo班级看起来像这样

public class Foo
{
    public static void func_1() { /* do something */ }
    public static void func_2() { /* do something */ }
}

我的Bar课看起来像这样

public class Bar
{
    public void method_1()
    {
         synchronized(Foo.class)
         {
             Foo.func_1();
         } 
    }          
}

现在,不是将Foo.class对象锁定在 中Bar.method_1,我可以声明Foo.func_1and Foo.func_2assynchronized并且仍然归档相同的目的吗?

谢谢

4

3 回答 3

3

静态同步方法获得类的锁定,并且通过锁定Foo.class,您正在做同样的事情。所以是的,他们会实现同样的目标。

于 2013-08-05T16:50:00.013 回答
2

是的,他们实现了同样的目标——锁定Foo.class以下是Java 语言规范第 8.4.3.6 节的相关摘录:

对于类(静态)方法,使用与方法类的 Class 对象关联的监视器。

在类synchronized中的静态func_1()func_2()方法上使用隐式锁定它,而显式锁定它。FooFoo.classsynchronized(Foo.class)

于 2013-08-05T16:50:31.530 回答
0

是的,它们几乎相同。唯一的区别是:在一种情况下,锁是在调用方法之前获取的,而在另一种情况下是稍后获取的。

于 2013-08-05T16:51:38.590 回答