假设我的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_1
,而不是在Foo.func_2
中锁定synchronized
对象,而且仍然存档的目的相同吗? / p>
谢谢
答案 0 :(得分:3)
静态同步方法获取类上的锁定并通过锁定Foo.class
,你正在做同样的事情。所以是的,他们会实现同样的目标。
答案 1 :(得分:2)
是的,他们实现了同样的目标 - 锁定Foo.class
。以下是Java Language Specification, Section 8.4.3.6的相关摘录:
对于类(静态)方法,与类关联的监视器 使用方法类的对象。
在synchronized
类中的静态func_1()
或func_2()
方法上使用Foo
会隐式隐藏Foo.class
,而synchronized(Foo.class)
会明确锁定它
答案 2 :(得分:0)
是的,他们几乎是一样的。唯一的区别是:在一种情况下,在调用方法之前获取锁定,而在另一种情况下,在稍后获取锁定。