阳关宅男 2017-03-19 03:32 采纳率: 0%
浏览 909

java中关于多线程死锁问题

class Test implements Runnable {
private boolean flag;

Test(boolean flag) {
    this.flag = flag;
}



public void run() {
    if (flag) {
        synchronized (Lock.locka) {
            System.out.println("if locka");
            synchronized (Lock.lockb) {
                System.out.println("if lockb");
            }
        }

    } else {
        synchronized (Lock.lockb) {
            System.out.println("else lockb");
            synchronized (Lock.locka) {
                System.out.println("else locka");
            }
        }
    }
}

}
class Lock
{
static Object locka = new Object();
static Object lockb = new Object();
}

public class Demo {

public static void main(String[] args) {
    Thread t1 = new Thread(new Test(true));
    Thread t2 = new Thread(new Test(false));
    t1.start();
    t2.start();
}

}
这种情况会出现死锁!
当时为什么我把
class Lock
{
static Object locka = new Object();
static Object lockb = new Object();
}
Object类放到Test类里面创建就没有出现死锁现象。测试n多遍。
求大神告知

  • 写回答

2条回答

  • oyljerry 2017-03-19 05:15
    关注

    在外面的时候两个线程访问的是一个锁a,b。这样刚好互锁了。
    而放到内部,两个线程都是各自的素女a,b。就不会出现死锁

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料