代码如下:
public class DeadlockDemo extends Thread {

private DeadlockDemo dld;

@Override
public synchronized void run() {

try {
System.out.println("线程启动");
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
dld.fun();
}

public synchronized void fun(){

try {
System.out.println("fun()方法调用");
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}

public static void main(String []args){
DeadlockDemo t1 = new DeadlockDemo();
DeadlockDemo t2 = new DeadlockDemo();
t1.start();
t2.start();
t1.dld = t2;   //这步看不明白,这里的“=”是赋值的意思吗?   
t2.dld = t1;   //同上
}

}

解决方案 »

  1.   

    这个概念性的我知道,我想问的是 t1.dld是什么意思?  “=”号又代表什么意思,是赋值号还是其他什么意思?“t1.dld = t2;”“t2.dld = t1;”过程是怎样的? 
      

  2.   

    t1对象的dld属性赋以t2的引用t1线程和t2线程在run方法中各自获得了t1和t2对象锁
    而在t1线程中 t2.fun() 需要获得t2对象锁 却为t2线程所拥有
    反之亦然 所以就死锁了可能有误 then