关于多线程编程您不知道的 5 件事
虽然很少有 Java? 开发人员能够忽视多线程编程和支持它的 Java 平台库,更少有人有时间深入研究线程。相反地,我们临时学习线程,在需要时向我们的工具箱添加新的技巧和技术。以这种方式构建和运行适当的应用程序是可行的,但是您可以做的不止这些。理解 Java 编译器的线程处理特性和 JVM 将有助于您编写更高效、性能更好的 Java 代码。
在这期的 5 件事 系列 中,我将通过同步方法、volatile 变量和原子类介绍多线程编程的一些更隐晦的方面。我的讨论特别关注于这些构建如何与 JVM 和 Java 编译器交互,以及不同的交互如何影响 Java 应用程序的性能。
?
正如您所期望的,清单 3 中的 MyObject
类通过 get
和 set
方法公开其 whatAmIReading
属性,但是 set
方法所做的有点不同。它不仅仅将其内部 Book
引用分配给指定的 Book
(这将使用 清单 3 中注释出的代码来完成),而是使用一个 AtomicReferenceFieldUpdater
。
?
结束语
多线程编程永远充满了挑战,但是随着 Java 平台的演变,它获得了简化一些多线程编程任务的支持。在本文中,我讨论了关于在 Java 平台上编写多线程应用程序您可能不知道的 5 件事,包括同步化方法与同步化代码块之间的不同,为每个线程存储运用 ThreadLocal
变量的价值,被广泛误解的 volatile
关键字(包括依赖于 volatile
满足同步化需求的危险),以及对原子类的错杂之处的一个简要介绍。参见 参考资料 部分了解更多内容。
转自:http://www.ibm.com/developerworks/cn/java/j-5things15/index.html?ca=drs-