java 可重入锁如何避免死锁的?
《java并发编程的例子》publicclassWidget{publicsynchronizedvoiddosomething(){...}}publicclassLo...
《java并发编程的例子》
public class Widget{
public synchronized void dosomething(){
...
}
}
public class LoggingWidget extends Widget{
public synchronized void dosomething(){
super.dosomething();
}
}
说LoggingWidget 的super.dosomething();无法获得Widget对象的锁,因为会死锁。这个过程是怎么回事?
到底是父类先获得Widget的锁还是子类先获得Widget锁的?
是谁先得到锁导致谁得不到锁结果产生死锁的?这部分没看懂。 展开
public class Widget{
public synchronized void dosomething(){
...
}
}
public class LoggingWidget extends Widget{
public synchronized void dosomething(){
super.dosomething();
}
}
说LoggingWidget 的super.dosomething();无法获得Widget对象的锁,因为会死锁。这个过程是怎么回事?
到底是父类先获得Widget的锁还是子类先获得Widget锁的?
是谁先得到锁导致谁得不到锁结果产生死锁的?这部分没看懂。 展开
展开全部
synchronized标记的同步是要绑定一个对象的,不写的话实际上实际上就是synchronized(this),即绑定当前对象,这个this对象就是锁(synchronized中可以认为就是监视器),当LoggingWidget执行dosomething的时候获得了这把锁(this),那么他去调用父类(Widget)的dosomthing的时候,父类的dosomething方法也要得到这个锁(this),但是子类的这个方法还没有运行完毕,所以还持有这个锁,父类方法在等,子类不释放锁还拼命的让父类方法执行,却不知道父类方法在眼巴巴的等着这个锁,这样就死锁了······
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询