public class MyAtomic {
public static void main(String[] args) {
AtomicInteger num = new AtomicInteger(1);
new Thread(()->AtomicIncrement(num)).start();
new Thread(()->AtomicIncrement(num)).start();
new Thread(()->AtomicIncrement(num)).start();
new Thread(()->AtomicIncrement(num)).start();
new Thread(()->AtomicIncrement(num)).start();
//线程不安全
int count = 1;
new Thread(()->increment(count)).start();
new Thread(()->increment(count)).start();
new Thread(()->increment(count)).start();
new Thread(()->increment(count)).start();
new Thread(()->increment(count)).start();
}
public static void AtomicIncrement(AtomicInteger num){
num.addAndGet(1);
System.out.println("atomicIncrement"+num.intValue());
}
public static void increment(int num){
num++;
System.out.println("increment"+num);
}
}
//使用volatile保证值在线程之间的可见性
private volatile int value;
public AtomicInteger(int initialValue) {
value = initialValue;
}
//开始以为会用锁之类的东西
//看源码之后发现就是使用了CAS操作
public final int addAndGet(int delta) {
return unsafe.getAndAddInt(this, valueOffset, delta) + delta;
}
//使用自旋锁+CAS保证原子性
public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
return var5;
}
LongAdder sum = new LongAdder();
new Thread(()->LongAdderIncrement(sum)).start();
new Thread(()->LongAdderIncrement(sum)).start();
new Thread(()->LongAdderIncrement(sum)).start();
new Thread(()->LongAdderIncrement(sum)).start();
new Thread(()->LongAdderIncrement(sum)).start();
public void LongAdderIncrement(LongAdder longAdder){
longAdder.add(1);
System.out.println("longadder"+longAdder.intValue());
}
AtomicInteger&LongAdder实例public class MyAtomic { public static void main(String[] args) { AtomicInteger num = new AtomicInteger(1); new Thread(()->AtomicIncrement(num)).s...