Java对多线程的支持(二) - 线程死锁 (二)

2014-11-24 11:44:59 · 作者: · 浏览: 33
n()是一个同步的方法,所以它会去检查this对象有没有被加锁,结果是没有,所以程序进入到fun()方法中,并给this 对象加锁。接着又遇到了synchronized(obj)同步块,由于线程A已经给obj对象加了锁,因此线程B是无法进入到此同步块中去的,只能等待。

这时线程A的睡眠时间到,从上次中断的地方继续往下执行,于是就遇到了synchronized(this)同步块。由于刚刚线程B已经给this对象加了锁,因而线程A无法进入到该同步块中,只能等待。

此时,就形成了线程A,B的死锁现象。


在多线程程序设计中,线程同步是一个非常复杂的问题,一旦处理不好,极有可能出现这样那样的问题。我们在实际应用中一定要多加小心,尽量避免此类错误的发生。