gpt4 book ai didi

java - 2个线程如何同时锁定同一个对象?

转载 作者:行者123 更新时间:2023-12-02 02:18:03 24 4
gpt4 key购买 nike

我正在编写一个多线程程序来打印从 1 到 n 的数字。

我有 2 个线程,其中有一个打印Odd 数字的运行程序。 1 个线程有一个打印 Even 数字的运行程序。

while (true) {              
synchronized (ng) {
while (ng.getData() % 2 == 1) {
try {
ng.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
ng.increment();
ng.notify();
}

我已将调试点放入同步方法中。附上快照:

enter image description here在第一个线程调用 notify() 之后,在调试选项卡中,它仍然显示

拥有 NumberGenerator

您可以在快照中看到:

它说有 2 个线程:Thread-1 和 Thread-2 拥有 NumberGenerator 对象。

2个线程如何同时持有对象锁?

最佳答案

两个线程不可能同时持有同一个锁。这可能是由于两个线程在调试器中显示的数据之间交换了锁。因此,例如,调试器将获取线程 1 的数据,然后线程 1 释放锁,然后线程 2 获取该锁,然后调试器在其中获取线程 2 的数据。这将使两个线程看起来都具有同时上锁。这个问题的答案很好地解释了这一点:Multiple threads hold the same lock? .

但我确实同意 Elliot 的观点,如果你只想打印数字 1 到 n,那么 for 循环就是正确的选择。但如果您想了解线程如何工作,拥有两个线程可能是一个很好的练习

关于java - 2个线程如何同时锁定同一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48980673/

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