CAS,全称为 Compare and Swap,即比较-替换。假设有三个操作数:内存值 V、旧的预期值 A、要修改的值 B,当且仅当预期值 A 和内存值 V 相同时,才会将内存值修改为 B 并返回 true,否则什么都不做并返回 false。当然 CAS 一定要 volatile 变量配合,这样才能保证每次拿到的变量是主内存中最新的那个值,否则旧的预期值 A 对某条线程来说,永远是一个不会变的值 A,只要某次 CAS 操作失败,永远都不可能成功。
java.util.concurrent.atomic 包下面的 Atom****类都有 CAS 算法的应用。
相关问题
-
Hashtable 的 size()方法为什么要做同步?
1年前 0 281
-
新建 T1、T2、T3 三个线程,如何保证它们按顺序执行?
1年前 0 327
-
同步方法和同步块,哪种更好?
1年前 0 266
-
什么是自旋锁?
1年前 0 277
-
多线程之间如何进行通信?
1年前 0 326
-
你如何在 Java 中获取线程堆栈?
1年前 0 177
-
线程中的 wait()和 sleep()方法有什么区别?
1年前 0 290
-
启动线程方法 start()和 run()有什么区别?
1年前 0 305
-
为什么你应该在循环中检查等待条件?
1年前 0 262
-
FutureTask 是什么?
1年前 0 342
-
Runnable 和 Thread 用哪个好?、
1年前 0 286
-
ReadWriteLock 有什么用?
1年前 0 170
-
提交任务时线程池队列已满会时发会生什么?
1年前 0 374
-
什么是活锁、饥饿、无锁、死锁?
1年前 0 174
-
什么是原子性、可见性、有序性?
1年前 0 195
-
什么是阻塞式方法?
1年前 0 315
-
ThreadLocal 是什么?有什么应用场景?
1年前 0 128
-
CyclicBarrier 和 CountDownLatch 的区别?
1年前 0 310
-
Java 内存模型是什么,哪些区域是线程共享的,哪些是不共享的?
1年前 0 354
-
怎么检测一个线程是否拥有锁?
1年前 0 131