• CAS


    CAS

    算法介绍
    • CAS(比较与交换,Compare and swap) 是一种有名的无锁算法。
    • CAS具有原子性
    • CAS, CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不要更改该位置,只告诉我这个位置现在的值即可
    • CAS是项 乐观锁 技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。
    • CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
    • 在JAVA中,sun.misc.Unsafe 类提供了硬件级别的原子操作来实现这个CAS。
    • sun.misc.Unsafe中的value是用来存储整数的时间变量,这里被声明为volatile
    • java.util.concurrent 包下的大量类都使用了这个 Unsafe.java 类的CAS操作。
    使用场景
    • 在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
    class MyThread implements Runnable {
    //    static  int i = 0;
         static AtomicInteger ai=new AtomicInteger(0);
          
     
        public void run() {
            for (int m = 0; m < 1000000; m++) {
                ai.getAndIncrement();
            }
        }
    };
     
    public class TestAtomicInteger {
        public static void main(String[] args) throws InterruptedException {
            MyThread mt = new MyThread();
     
            Thread t1 = new Thread(mt);
            Thread t2 = new Thread(mt);
            t1.start();
            t2.start();
            Thread.sleep(500);
            System.out.println(MyThread.ai.get());
        }
    }
    
  • 相关阅读:
    结合php ob函数理解缓冲机制
    php中的require-once
    PHP面试题基础问题
    Jquery显示与隐藏input默认值的实现代码
    win7下cmd常用命令
    采用cocos2d-x lua 的listview 实现pageview的翻页效果之上下翻页效果
    采用cocos2d-x lua 制作数字滚动效果样例
    luac++
    lua相关笔记
    cornerstone知识点
  • 原文地址:https://www.cnblogs.com/frankltf/p/10345174.html
Copyright © 2020-2023  润新知