2.6 小结
线程交互通常是通过共享变量完成的,当线程之间没有交互,开发多线程的应用程序会变得简单许多。一旦发生了交互,竞态条件、数据竞争以及缓存变量等诱发线程不安全(在多线程环境下不正确)的因素就会暴露出来。
你可以使用同步解决之前的线程问题。同步是JVM的一个特性,旨在保证两条或者两条以上并发的线程不会同时进入同一块临界区。临界区就是必须以串行方式访问的一段代码块。
活跃性这个词代表着某件正确的事情最终会发生。活跃性失败发生在应用程序触及一种无法继续执行的状态。在单线程的应用程序中,无限循环就是一个例子。多线程应用程序面临着诸如死锁、活锁和饿死的额外挑战。
同步展示了两种属性:互斥性和可见性。synchronized关键字与两者都有关系。Java同时也提供了一种更弱的、仅仅包含可见性的同步形式,并且只以volatile关键字关联。
当一个属性变量声明成volatile,就不能同时声明成final的。不过,由于Java可以让你安全地访问final的属性而无需同步,这也就不能称之为一个问题了。以后你会经常使用final来确保在不可变(不会发生改变)类的上下文中线程的安全性。
第3章会涉及等待和通知相关的话题。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
时间: 2024-08-29 02:27:17