zoukankan      html  css  js  c++  java
  • 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());
        }
    }
    
  • 相关阅读:
    JQuery对象操作支持链式法则源码分析
    JQuery + JSON作为前后台数据交换格式实践
    JQuery html API支持解析执行Javascript脚本功能实现-代码分析
    跨域访问实践
    XP下安装MAC OS虚拟系统
    Android APP开发笔记
    CSS浮动与清浮动
    LUA 模块化编程例子
    JavaScript解决命名冲突的一种方法
    XML中文本节点存储任意字符的方法
  • 原文地址:https://www.cnblogs.com/frankltf/p/10345174.html
Copyright © 2011-2022 走看看