Synchronization
线程主要通过共享对字段和对象引用字段所引用的访问来进行通信。这种通信形式非常有效,但是却可能导致两种错误:线程干扰和内存一致性错误。防止这些错误所需的工具是同步。
但是,同步可能会引入thread contention,当两个或多个线程试图同时访问同一资源时,就会发生thread contention,并且*导致 Java 运行时更慢地执行一个或多个线程,甚至挂起它们的执行。 饥饿和活锁是线程争用的形式。有关更多信息,请参见Liveness部分。
本节涵盖以下主题:
-
Thread Interference描述了多个线程访问共享数据时如何引入错误。
-
内存一致性错误描述了由于共享 memoryview 不一致而导致的错误。
-
Synchronized Methods描述了一个简单的习惯用法,可以有效防止线程干扰和内存一致性错误。
-
隐式锁和同步描述了一个更通用的同步习惯用法,并描述了如何基于隐式锁进行同步。
-
Atomic Access讨论了不会被其他线程干扰的一般操作概念。