难道线程的死锁==线程的等待???应该不是吧

RayBB 2007-04-06 02:03:51
死锁没有成功,不能找出错误原因
public class TestDeadLock implements Runnable {
int frag ;
static Object o1 = new Object(),o2 = new Object();
public void run(){
System.out.println("frag"+frag);
if(frag==1){
synchronized(o1){

try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
}
}
synchronized(o2){
System.out.print("ok2");
}
}


if(frag==0){
synchronized(o2){
try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
}
}
synchronized(o1){
System.out.print("ok1");
}
}
}
public static void main(String[] args) {
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.frag=1;
td2.frag=0;
Thread th1 = new Thread(td1);
Thread th2 = new Thread(td2);
th1.start();
th2.start();

}

}

...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
RayBB 2007-04-06
  • 打赏
  • 举报
回复
谢谢
maquan 2007-04-06
  • 打赏
  • 举报
回复
你这段程序并不构成死锁。td1 是在释放了 o1 之后才申请 o2,而 td2 是在释放了 o2 之后才申请 o1,所以不是死锁,只是等了一会儿而已。

你如果把 td1 的 synchronized(o2) 放到 synchronized(o1) 内部,再把 td2 的 synchronized(o1) 放到 synchronized(o2) 的内部,就会死锁了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧