栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java乐观锁(无锁)--- CAS算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java乐观锁(无锁)--- CAS算法

CAS : CompareAndSwap 比较然后交换

一个变量为0;A线程拿到后,自增,然后返回,发现这个变量还是0,那么就修改这个变量的值

ABA问题 : 利用版本号机制来解决ABA问题,变量0  - ->  8  --->  0  线程A并没有发现这个变量被别人修改过。

原子性问题:CAS操作存在着线程不安全的问题,当线程A去看门牌号时,这时线程B也抢到了时间片,二者同时修改为1.好比两个人进了更衣室,十分尴尬。所以CAS操作必须是原子性的

package leetcode0606.CAS;

import java.util.concurrent.atomic.AtomicInteger;

public class Test1 {
    static AtomicInteger num = new AtomicInteger(0);
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    while (num.get()<1000){
                        System.out.println(Thread.currentThread().getName()+":"+num.incrementAndGet());
                    }
                }
            });
            thread.start();
        }
    }
}

乐观锁底层 lock cmpxchg 指令实现,1)锁总线  2)关中断  3)锁缓存行

乐观锁底层也是悲观锁 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号