AQS算法与CAS算法

AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
AQS 定义两种资源共享方式:
1.公平锁:按照线程在队列中的排队顺序,先到者先拿到锁
2.非公平锁:当线程要获取锁时,先通过两次 CAS 操作去抢锁,如果没抢到,当前线程再加入到队列中等待唤醒。

CAS:它是一条CPU并发原语,也是一种无锁算法。
它的功能是在不使用锁的情况下实现多线程之间共享变量的同步。算法思想:判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程涉及到三个参数,分别是:内存地址,期望的值以及要修改的值。并且该操作是原子的。

缺点:
1.由于使用了do while循环,如果多次比对不正确,循环次数变多开销大,效率变低
2.CAS是对原子包装类的操作,所以只能保证一个共享变量的原子性。
3.会引发ABA问题

ABA问题的解决方案:
让原子包装类对象带上版本信息,给对象带上标记,那么在进行比较的时候就不仅要比对内容是否相同,还需要比对版本是否一致。
所以可使用AtomicStampedReference类来实现这一功能,该类是在原子引用类的基础上加上了时间戳的概念

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。