为什么下面的代码会导致不稳定的死锁?

问题描述 投票:0回答:0

enter image description here

我想验证synchronized关键字!!但是结果和我预测的不一致!!我不明白为什么会发生死锁

private final ReentrantLock lock = new ReentrantLock(true); 私人 int 原子整数 = 0;

public void writer() {
    dd();
}

public void reader() {
    dd();
}

public synchronized void dd() {
    atomicInteger++;
}

public void test() {
    lock.lock();
    atomicInteger = 0;
    Thread writer = new Thread(this::writer);
    Thread reader = new Thread(this::reader);
    writer.start();
    reader.start();
    for (; ; ) {
        if (atomicInteger == 2) {
            lock.unlock();
            System.out.println(Thread.currentThread().getName()+"Lock released!");
            break;
        }
    }
}

@Test
public void volatileTest() {
    for (int i = 0; i < 100; i++) {
        Thread thread = new Thread(this::test);
        thread.setName("thread【" + i + "】");
        thread.start();
    }
    for (; ; ) {

    }
}
java synchronized
© www.soinside.com 2019 - 2024. All rights reserved.