今天正在学习一本新书
其中当我看到synchronized关键字的片段的时候就在想一个问题
其中书中说到一个对象会自动生成唯一一个对象的锁,就相当于一个对象只有一把属于自己的锁和钥匙,如果出现下面情况
public class Parent{
public synchronized void test(){
//......
}
}
public class Children extends parent{
@Override
public synchronized void test(){
super.test();
}
}
这种情况会极造成死锁 因为当进入test方法中的时候 已经将锁住 然后在进入super的test方法时候锁没有被释放,所以就会造成死锁,程序会一直等待
但是如果是这样的情况
class TestClass{
public synchronized void test(){
testClass();
}
public static synchroized void testClass(){
}
}
就不会造成死锁的现象,原因就在于这俩方法的锁不是一个锁,一个是类的锁,一个是对象锁,所以静态方法和静态方法会互斥,对象方法和对象方法会互斥,但是静态方法和对象方法不会互斥