同步库/第三

在Java中,通常认为在你没有写的类类型的对象上显式同步是安全的吗? 我问这个问题是因为看起来如果该对象内部试图自己进行同步,那么在另一个线程尝试使用内部获取该对象的监视器的该对象的非同步方法和显式获取该对象的线程之间可能会有意外的死锁对象上的锁。 我从来没有听过或读过任何说这是个不好的主意,尽管看起来可能是这样。


Java允许你这样做,但不要。 你应该非常努力地将锁定封装在一个类中,或者尽可能在最小的单位内进行封装。

锁定一个你不拥有和完全理解的对象可能导致死锁和其他困惑。

看看这个问题,并考虑它如何适用于锁定第三方对象。

此外,对JCiP的强制性参考 - 在实践中阅读Java Concurrency,以便对如何构建并发程序进行全面,可读和高质量的讨论。


我认为这个问题的答案归结为信任。 你相信班级作家写下他们的对象的方式是不会发生你提到的问题吗? 如果是的话,就去做吧。 如果不是,那么你已经给出了这可能导致问题的时间的例子。

如果“看起来这可能是一个坏主意”,它可能是。 线程是变幻莫测的,除非你能证明它是正确的,否则很可能不是(除非完全是偶然的)。

如果是我,我会保守,而不是在一个我完全无法控制的对象上进行同步,所以我可以确定它是正确的,没有任何猜测。

链接地址: http://www.djcxy.com/p/64251.html

上一篇: Synchronizing on library/third

下一篇: Omnicompletion stops giving useful predictions