假设我有一个类,其中has方法以如下方式同步.
public class Test{ public static synchronized void method1(){ } public static synchronized void method2(){ } public synchronized void method3(){ } public synchronized void method4(){ } }
所以,当两个线程调用场景method1
和method2
simultaneously.I觉得只是方法之一被允许call.What会是这样的,如果他们打电话method1
和method3
.Will那里是同样的情景也在这里?会是怎样的情况下,与method3
和method4
来自同一个对象?
如果有两个Test类对象,由x和y引用,则会有三个监视器,一个用于Test,一个用于x,一个用于y.
method1和method2都使用Test监视器,因此相互排斥.method3和method4每个都使用监视器作为其目标对象,因此如果调用同一个对象,它们会相互排斥,但如果调用不同的对象则不会.它们不涉及Test监视器,因此它们不排除静态方法.