Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制
?
图 2. synchronized 和 Lock 的吞吐率(标准化之后),4 个 CPU
?
图 1 和图 2 中的图表以每秒调用数为单位显示了吞吐率,把不同的实现调整到 1 线程?synchronized?的情况。每个实现都相对迅速地集中在某个稳定状态的吞吐率上,该状态通常要求处理器得到充分利用,把大多数的处理器时间都花在处理实际工作(计算机随机数)上,只有小部分时间花在了线程调度开支上。您会注意到,synchronized 版本在处理任何类型的争用时,表现都相当差,而Lock?版本在调度的开支上花的时间相当少,从而为更高的吞吐率留下空间,实现了更有效的 CPU 利用。
图 4. 使用 1 个 CPU 时的同步、协商和公平锁的相对吞吐率
?参考资料- 您可以参阅本文在 developerWorks 全球站点上的?英文原文。?
- 请阅读 Brian Goetz 撰写的完整的?Java 理论与实践?系列。?
- 开发人员经常混淆非争用同步成本与争用同步成本。“?Synchronization is not the enemy”(?developerWorks,2001 年 7 月)提供了一些粗略的基准检测,用以估计非争用同步的成本,“?Reducing contention"(?developerWorks,2001 年 9 月)提供了降低应用程序中锁争用影响的一些教程。?
- Lock的 Javadoc、?ReentrantLock以及?Condition提供了有关新锁定类的应用程序和行为的更多信息。?
- Doug Lea 撰写的?Concurrent Programming in Java, Second Edition?是一本关于在 Java 编程中进行多线程编程的一些微妙问题的权威书籍。?
- JavaOne 2004 年的?演示文档中概括了 JDK 5.0 中的一些并发性方面的改进。?
- 在?developerWorksJava 技术专区?中,可以找到 Java 各个方面的文章。?
- 请参阅?Developer Bookstore,获得技术书籍的完整列表,其中包括数百本?Java 相关主题的书籍。?