同步库/第三方类?

时间:2011-02-26 22:35:38

标签: java synchronization

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

2 个答案:

答案 0 :(得分:1)

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

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

查看this question并考虑它如何适用于锁定第三方对象。

此外,有必要参考JCiP -- Read Java Concurrency in Practice进行关于如何构建并发程序的全面,可读和高质量的讨论。

答案 1 :(得分:0)

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

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

如果是我,我会保守,并且不能完全控制我完全无法控制的物体,所以我可以确定它是正确的,没有猜测。