2. 原子性 Atomic

对于涉及共享变量访问的操作,若该操作从其执行线程以外的任意线程来看是不可分割的,那么该操作就是原子操作,称该操作具有原子性

实现原子性的两种方式:

  1. 使用锁(Lock)
  2. 利用CAS(Compare and Swap) 直接在硬件(处理器、内存)这一层次实现,又被称为“硬件锁”

在Java中,对基础数据类型(除double、long以外)的变量引用变量写操作都是原子性

Java中的double、long类型变量会占用64位(8字节)的存储空间,32位的Java虚拟机对这种变量的写操作可能会分解为两个步骤实施,比如先写低32位,后写高32位,故不能保证原子性

Java中对任何变量的读操作都是原子性的

Java语言规范特别地规定对于volatile关键字修饰的long/double类型变量的写操作是具有原子性的

可以使用synchronized关键字来保证操作的原子性

原子操作 + 原子操作 != 原子操作

你可能感兴趣的:(2. 原子性 Atomic)