阳关宅男 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 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度