【发布时间】:2015-02-25 22:05:04
【问题描述】:
我一直在网上寻找有关如何允许执行静态同步方法的信息。我发现静态同步方法将获取类锁。据我了解,这可确保仅允许所有现有类实例之一执行静态同步方法。真的是这样吗?是否可以有 2 个类实例同时执行静态同步方法?因此,为了使其更直观,我添加了一个代码示例。
public class A {
private static synchronized void m1() {
//Print something
}
private synchronized void m2() {
//Print something else
}
}
我明白,因为静态方法是获取类级监视器,非静态方法是获取对象级监视器,所以两者可以同时从两个不同的线程执行,如下所示:
A a = new A;
a.m2();//object-level lock acquired
a.m1();//Class-level lock acquired
但是,如果我们有 3 个上述类的实例,它们可以同时运行 m1() 吗?我认为他们不能,但我不确定。那么这会发生吗?
A a = new A;
A aa = new A;
A aaa = new A;
a.m1();
aa.m1();
aaa.m1();
【问题讨论】:
-
您最好将静态 m1 方法调用写为“A.m1()”,而不是“a.m1()”等 - 在最后一个示例中,您不需要 a, aa, aaa 对象。
标签: java multithreading