文章目录
atomic的原理?
(1)JDK中Atomic开头的类,是通过CAS原理解决多线程并发下的原子性问题的。
(2)CAS 包含 3 个参数,CAS(V, E, N)。
V 表示需要更新的变量,E 表示预期值,N 表示新值。只有当变量 V 的值等于 E 时,变量 V 的值才会被更新为 新值。如果变量 V 的值不等于 E ,说明变量 V 的值已经被更新过,当前线程什么也不做,返回更新失败。
(3)当多个线程同时使用 CAS 更新一个变量时,只有一个线程可以更新成功,其他都失败。失败的线程不会被挂起,可以继续重试 CAS,也可以放弃操作。
CAS 操作的原子性是通过 CPU 单条指令完成而保障的。JDK 中是通过 Unsafe 类中的 API 完成的。
(4)在并发量很高的情况,会有大量 CAS 更新失败,所以需要慎用。