原子引用ABA问题 在很多时候原子引用没法知道共享变量是否被更改过,比如说,当前共享变量的值为A,而线程1想更改A的值为C,那么是可以更改成功的,如果在线程1修改A->C之前,有其他的线程对A进行了修改,例如先把A改为B后又把B改为A,那么线程1还是可以更改成功的。 1. ABA示例 public class Test26 { static AtomicReference<String> reference = new AtomicReference<>("A"); pub…
原子引用ABA问题 在很多时候原子引用没法知道共享变量是否被更改过,比如说,当前共享变量的值为A,而线程1想更改A的值为C,那么是可以更改成功的,如果在线程1修改A->C之前,有其他的线程对A进行了修改,例如先把A改为B后又把B改为A,那么线程1还是可以更改成功的。 1. ABA示例 public class Test26 { static AtomicReference<String> reference = new AtomicReference<>("A"); pub…
AtomicReference AtomicInteger和AtomicLong这类原子整数主要是针对整数类型的线程安全的,为了实现对原子引用的线程安全,引入了AtomicReference这个原子引用类 还是拿1000个线程同时取10块钱的案例举例,代码如下所示: public interface Account { public BigDecimal getBalance(); public void withdraw(BigDecimal amount); static void…