AtomicXXX 都是
CAS(无锁优化 自旋 乐观锁)
Compare And Set
Compare And Swap
cas(V,Expected,NewValue)
-if V == E
V = New
otherwise try again or fail
-CPU原语支持
先获取一下
ABA问题: 符合Expected
-加version
-A 1.0
-B 2.0
-A 3.0
-cas(version)
版本号 检查版本号
如果基础类型 -无所谓 -引用类型 你的女朋友跟你复合,中间经历了别的女人
== Unsafe ==c c++的指针 单例模式
直接操作java虚拟机的内存
c ->malloc free c++ -> new delete
public class T01_AtomicInteger {
/*volatile*///int count = 0;
//原子操作
AtomicInteger count = new AtomicInteger();
/*synchronized*/void m() {
for(int i =0; i < 10000; i++)
//if count.get() < 1000
count.incrementAndGet();
}
public static void main(String[] args) {
T01_AtomicInteger t = new T01_AtomicInteger();
List<Thread> threads = new ArrayList<Thread>();
for(int i=0;i<10;i++) {
threads.add(new Thread(t::m,"thread-" + i));
}
threads.forEach((o) -> o.start());
threads.forEach((o) ->{
try {
o.join();
}catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println(t.count);
}
}