long 的线程安全

1.使用基础变量int(线程不安全)

2.使用AtomicLong和LongAdder的代码(线程安全)
AtomicLong:
  使用死循环不断地compareAndSwap到特定的值,从而达到更新数据的目的
  缺点:唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高,重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低
  
LongAdder:
  高并发时:将对单一变量的CAS操作分散为对数组cells中多个元素的CAS操作,取值时进行求和;
  并发较低时:仅对base变量进行CAS操作,与AtomicLong类原理相同,不得不说这种分布式的设计还是很巧妙的。
  缺点: 在统计的时候,如果有并发更新,可能会导致统计数据有些误差

 

你可能感兴趣的:(java基础)