gpt4 book ai didi

java - Java中类级同步是如何实现的?

转载 作者:行者123 更新时间:2023-12-01 17:59:59 24 4
gpt4 key购买 nike

我有一个具有某种状态的类的对象。该对象有两个方法(method1()method2()),两者都在更改 obj 的状态。method1() 已同步,但 method2() 未同步。

现在有两个线程,thread1 和thread2 接近对象->threads1 调用同步的 method1()-> thread2 调用未同步的 method2()

我在测试结果中发现,即使 method1() 持有锁,method2() 也能正确执行。但我想,如果通过在方法上加上synchronized关键字来获取整个对象的锁,那么还能执行多少个方法呢?应该等待。

非常感谢您的意见。

最佳答案

当我们说调用同步方法或 block 会导致锁定时,这意味着线程独占地获取锁。这并不意味着线程获取锁的对象的状态受到任何其他保护。

(内部锁被附加到对象上,包括类对象,这是语言设计者的一种方便。这个决定可能不是最好的。使用专用对象来锁定通常是一个更好的主意。)

您的不同步调用可能会破坏共享状态。除此之外,没有设置内存屏障,并且其他线程可能看不到调用非同步方法的线程所做的更改。在进行代码重新排序等优化时,JIT 不会考虑跨线程可见性问题。

很难预测未充分同步的代码中会发生什么。

关于java - Java中类级同步是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41762041/

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