gpt4 book ai didi

Java:wait() 不释放锁。为什么?

转载 作者:行者123 更新时间:2023-12-02 01:42:19 25 4
gpt4 key购买 nike

我的代码停在“生产者已启动”处。为什么 wait() 不释放锁?我在同步部分使用相同的对象,但它不起作用。

class Processor {
public void produce() throws InterruptedException {
synchronized (this) {
System.out.println("Producer started");
wait();
System.out.println("Producer ended");
}
}

public void consume() throws InterruptedException {
System.out.println("Consumer started");
Scanner scanner = new Scanner(System.in);
synchronized (this) {
scanner.nextLine();
System.out.println("go to producer");
notify();
Thread.sleep(1000);
System.out.println("Consumer ended");
}
}
}

当我在不同的线程中运行此代码时,我使用相同的 Processor 对象

public class Main {
public static void main(String[] args) throws InterruptedException {
Processor processor = new Processor();

Thread t1 = new Thread(() -> {
try {
processor.produce();
} catch (InterruptedException e) {}
});

Thread t2 = new Thread(() -> {
try {
processor.consume();
} catch (InterruptedException e) {}
});

t1.run();
t2.run();
t1.join();
t2.join();
}
}

最佳答案

也许可以尝试一下:

t1.start ();
t2.start ();

而不是

t1.run ();
t2.run ();

关于Java:wait() 不释放锁。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292442/

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