您已经为使用Java配备Monitors付出了(大部分且争夺性很低)的惩罚……没有理由不使用它们。特别是在低竞争的情况下,它们非常便宜(请参阅此处的项目2.1、2.2、2.3和此处的项目#1),JVM可以在许多情况下完全优化它们。如果仅暂时使用对象的监视器,则JVM将使其变得“足够大”(这意味着它以位翻转开始,对于简单的争用情况可能会扩展为堆栈分配的原子标志,并且在持久争用下为该对象分配了对象监视器它;所有这些将在争用减少时退回到低开销的情况),并在以后收回空间。就这些对象上的锁定而言,在应用程序方面是“正确的事情”,我会说。
但是,这里有设计气味。锁定这么多对象听起来并不好。此外,如果您有任何顺序锁定条件,您将无法推理潜在的死锁。我建议您用有关该应用程序的更多详细信息来补充您的问题,我们可以问一下锁定大型对象池是否正确。
此演示文稿由Dave骰子给出了一些有益的见解的Java6同步是如何工作的,这博客条目是同步的Java的信息宝库。如果您真的很在乎一个完整的对象监视器结构有多“大”(在有争议的情况下会起作用),请参见此处的代码。HotSpot内部Wiki页面也提供了一些很好的深入信息。



