阳关宅男 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 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符