CAS操作的ABA问题是什么?
解决方法:
假如线程1获取当前被volatile修饰的变量X的值为A,然后想使用CAS操作修改X的值为B,但在执行CAS前,线程2使用CAS修改了变量X的值为B,然后又使用CAS修改了变量X的值为A。所以虽然线程1执行CAS时旧的X的值还是A,但是这个A已经不是线程1获取时的A了。这就是ABA问题。JDK中的AtomicStampedReference类给每个变量的状态值都配备了一个时间戳,从而避免了ABA问题的产生。
CAS操作的ABA问题是什么?
解决方法:
假如线程1获取当前被volatile修饰的变量X的值为A,然后想使用CAS操作修改X的值为B,但在执行CAS前,线程2使用CAS修改了变量X的值为B,然后又使用CAS修改了变量X的值为A。所以虽然线程1执行CAS时旧的X的值还是A,但是这个A已经不是线程1获取时的A了。这就是ABA问题。JDK中的AtomicStampedReference类给每个变量的状态值都配备了一个时间戳,从而避免了ABA问题的产生。
有建议,请留言!