这些Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改了解Java SE 9和后续版本中更新的语言特性的概述。
请参阅JDK发行说明了解所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息。
同步
线程主要通过共享字段和字段引用的对象访问进行通信。这种形式的通信非常高效,但可能导致两种错误:线程干扰和内存一致性错误。防止这些错误所需的工具是同步。
然而,同步可能引入线程争用,当两个或多个线程尝试同时访问同一资源并导致Java运行时执行一个或多个线程较慢,甚至暂停它们的执行。饥饿和活锁是线程争用的形式。有关更多信息,请参阅章节饥饿和活锁中的活性。
本节介绍以下主题:
- 线程干扰描述了多个线程访问共享数据时引入的错误。
- 内存一致性错误描述了由于共享内存的不一致视图而产生的错误。
- 同步方法描述了一种简单的习惯用法,可以有效地防止线程干扰和内存一致性错误。
- 隐式锁和同步描述了一种更通用的同步习惯用法,并描述了同步是基于隐式锁的。
- 原子访问讨论了一般操作的特点,这些操作不会被其他线程干扰。