Skip to content

Latest commit

 

History

History
17 lines (13 loc) · 1.5 KB

volatile,CAS,ABA.md

File metadata and controls

17 lines (13 loc) · 1.5 KB

volatile、CAS(Compare and Swap)、以及 ABA 问题都涉及到多线程编程中的并发控制。

volatile:

volatile 是 Java 关键字,用于标记一个变量可能会被多个线程同时访问,禁止线程将变量缓存在线程本地内存中。 当一个变量被声明为 volatile,每次对该变量的写操作都会立即刷新到主内存,而每次读操作都会从主内存中重新加载,确保了可见性。 CAS(Compare and Swap):

CAS 是一种并发算法,用于实现多线程环境下的原子操作。它包含三个参数:内存位置(地址)、期望值和新值。 CAS 操作会比较内存中的值与期望值,如果相等,则将内存位置的值更新为新值。这个过程是原子的。 Java 中的 java.util.concurrent.atomic 包提供了一系列基于 CAS 的原子类,如 AtomicInteger、AtomicLong 等。 ABA 问题:

ABA 问题指的是在一些情况下,一个值经过一系列操作之后变回原来的值,可能导致检查变量值的线程无法察觉到这个变化。 CAS 操作中,只有在期望值和当前内存位置的值完全一致时才会执行更新。但如果其他线程在这期间修改了两次,使得最终值回到原来的值,那么 CAS 操作无法察觉到这个中间过程的变化。 解决 ABA 问题的一种方式是使用带版本号的 CAS,确保在更新时检查变量的版本号。 综合使用 volatile、CAS,以及适当的同步机制,可以在多线程环境中实现线程安全的操作。