繁体   English   中英

同步库/第三方类?

[英]Synchronizing on library/third-party classes?

在Java中,通常认为在未编写的类类型的对象上显式同步是安全的吗? 我问这个是因为看起来如果该对象在内部尝试自身同步,则可能在另一个线程尝试使用该对象的非同步方法(内部获取对象的监视器)和明确获取的线程之间存在意外的死锁锁定对象。 我从来没有听过或读过任何说这是个坏主意的事情,虽然它似乎可能是。

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

锁定您不拥有并完全理解的对象可能会导致死锁和其他混乱。

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

此外,强制引用JCiP - Read Java Concurrency in Practice,以便对如何构建并发程序进行全面,可读和高质量的讨论。

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

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

如果是我,我会保守,而不是同步我没有完全控制的对象,所以我可以确定它是正确的,没有猜测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM