java多线程死锁问题

整个代码情况是,我创建了2个线程,故意让一个线程走的if,另一个线程走的else,这是老师的死锁代码示例,我没懂死锁是怎么产生的,两个线程到了show方法那里的时候,面对... 整个代码情况是,我创建了2个线程,故意让一个线程走的if,另一个线程走的else,这是老师的死锁代码示例,我没懂死锁是怎么产生的,两个线程到了show方法那里的时候,面对的都是同一个锁对象,那就能够限制线程的进入,那么一定会等到上一个线程出来了下一个线程才进去,怎么会产生死锁呢 展开
 我来答
树音悦vy
2018-05-20 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:94
采纳率:27%
帮助的人:50.4万
展开全部
public class Test520 {//测试类

public static void main(String[] args) {
Test1 t1=new Test1();//构造线程1
Test2 t2=new Test2();//构造线程2
t1.start();//启动线程1
t2.start();//启动线程2
}

}

class Test1 extends Thread{//线程类1
public void run() {//线程类1的run方法
synchronized (A.class) {//线程类1获取A类的锁
new A().a();//构建A类调用a方法,线程可以执行到这里
synchronized (B.class) {//线程1请求获取B类的锁,看后面的代码我们知道B类的锁在线程2中,形成死锁
new B().b();//构造B类,调用b方法,这语句无法执行,因线程1始终无法获得已被线程2获得的B类锁
}
}
}
}

class Test2 extends Thread{//线程类2
public void run() {//线程类2的run方法
synchronized (B.class) {//线程2获取了B类的锁,因此线程1无法在调用a方法后获取B类锁执行后面的语句
new A().a();//构造A类对象调用a方法,此语句可以执行
synchronized (A.class) {//线程2请求A类锁,A类锁此时被线程1持有
new B().b();//如果线程2能够获取A类锁,就能执行这一步,测试知道,无法执行到这句
}
}
}
}

class A{//测试类
public void a() {
System.out.println("a");
}
}

class B{//测试类
public void b() {
System.out.println("b");
}
}
追答
利用这段代码,可以帮助你理解死锁的一种模式,就是两个线程分别持有对方所需要的锁,并相互等待对方释放该锁。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式