gpt4 book ai didi

java - java.lang.Object.wait() 的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 09:29:46 25 4
gpt4 key购买 nike

为什么在这里m.wait();即使当前线程 (ma​​in) 持有对象 m 的锁,也会导致 IllegalMonitorStateException 异常在调用m.wait();之前?

import java.util.concurrent.locks.*;

class Lock1 extends ReentrantLock{
}

class Main{
public void test() throws InterruptedException{
synchronized(this){
Lock1 m = new Lock1();
System.out.println("line 1");
m.lock();
System.out.println(m.getHoldCount());
System.out.println(m.isHeldByCurrentThread());
System.out.println("line 2");
m.wait();
System.out.println("line 3");
}
}
public static void main(String[] args) throws InterruptedException{
Main t1 = new Main();
t1.test();
}
}

最佳答案

您将旧式同步、Object.wait() 与 ReentrantLock 的方法混合在一起。

具体来说,m.wait() 是旧式的 Object.wait(),而不是 ReentrantLock 中定义的任何内容。如果你想在某些条件发生变化并且另一个线程通知你之前让出,你需要使用 ReentrantLock 的条件(即 newCondition())。

关于java - java.lang.Object.wait() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58083982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com