代码如下:
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; //同上
}
}
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; //同上
}
}
解决方案 »
- java基础的替换问题,求高手指教……谢谢
- swing事件
- JBulider 里连MYsql 求救
- Jtable的问题
- 为什么我写的applet程序无法在没装java runtime的浏览器上运行,急
- 关于mysql数据库的查询表格显示在java的图形界面上
- 一个关于java多态的问题
- jbuilder7如何设置使其自动检错功能失效?
- 请教,Inserts类是拿来干什么用的?
- 关于jbuilder,到底是在jbuilder中指定的classpath有用,还是在autoexec.bat中指定的classpath有用
- 抽象类和接口的作用到底是什么???
- 我的log4J出问题了,为什么会打印代码出来??
而在t1线程中 t2.fun() 需要获得t2对象锁 却为t2线程所拥有
反之亦然 所以就死锁了可能有误 then