Synchronization

线程主要通过共享对字段和对象引用字段所引用的访问来进行通信。这种通信形式非常有效,但是却可能导致两种错误:线程干扰和内存一致性错误。防止这些错误所需的工具是同步。

但是,同步可能会引入thread contention,当两个或多个线程试图同时访问同一资源时,就会发生thread contention,并且*导致 Java 运行时更慢地执行一个或多个线程,甚至挂起它们的执行。 饥饿和活锁是线程争用的形式。有关更多信息,请参见Liveness部分。

本节涵盖以下主题:

  • Thread Interference描述了多个线程访问共享数据时如何引入错误。

  • 内存一致性错误描述了由于共享 memoryview 不一致而导致的错误。

  • Synchronized Methods描述了一个简单的习惯用法,可以有效防止线程干扰和内存一致性错误。

  • 隐式锁和同步描述了一个更通用的同步习惯用法,并描述了如何基于隐式锁进行同步。

  • Atomic Access讨论了不会被其他线程干扰的一般操作概念。