原子性问题
原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行
一些常见的代码,如i++并不是原子操作,多线程并发执行时极易出现错误
1 | public static void main(String[] args) { |
1 | public class AtomicDemo implements Runnable{ |
jdk1.5后java.util.concurrent.atomic包提供了许多包装器用于原子的整数浮点数等
- 它们内部使用了volatile保证内存可见性,
- CAS(Compare-And-Set)算法保证数据操作的原子性,CAS算法是硬件对于并发操作共享数据的支持
CAS算法包含了三个操作数: 内存值 V;预估值 A;更新值 B;当且仅当V == A时,V=B,否则什么也不做
1 | public class AtomicDemo implements Runnable{ |