如果一个类有这两种方法:
public static synchronized void m1(){}
public synchronized void m2(){}
两个线程可以同时执行这两个方法吗?
答案 0 :(得分:1)
是的,两个线程可以同时执行这两个方法。静态方法在类上同步,另一个方法在对象本身上同步。
换句话说,静态方法相当于此代码块:
synchronized(MyClass.class) {
...
}
其中MyClass
是定义静态方法的类。请注意,它与非静态方法中的this.getClass()
不同,因为getClass()
会返回派生最多的类。