zoukankan      html  css  js  c++  java
  • java并发编程基础 --- 7章节 java中的13个原子操作类

      当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量 i=1,A线程更新 i+1,B线程也更新 I+1,经过两个线程的操作之后可能 I不等于3,而是等于2.因为A和B线程更新变量I的时候拿到的 I都是1,,这就是线程不安全的更新操作,通常我们会使用synchronized来解决这个问题,synchronized会保证多线程不会同时更新变量 I.

      而java从jdk1.5开始提供了javalutil.concurrent.atomic包(简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。

      因为变量的类型有很多种,所以在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型原子更新数组原子更新引用原子更新属性(字段)。Atomic包里的类基本都是使用Unsafe实现的包装类。

      一、原子更新基本类型

      ·使用原子的方式更新基本类型,Atomic包提供了一下3个类

        AtomicBoolean:原子更新布尔类型

        AtomicInteger:原子更新整型

        AtomicLong:原子更新长整型

      以上三个类提供的方法几乎一模一样,所以本节仅以AtomicInteger为例进行谅解,AtomicInteger的常用的方法如下

      

      

      二、原子更新数组

        通过原子方式更新数组里面的某个元素,Atomic包提供了以下4个类

        AtomicIntegerArray:原子更新整型数组里的元素

        AtomicLongArray:原子更新长整型数组里的元素

        AtomicReferenceArray:原子更新引用类型数组里的元素

        原子更新整型数组

        

        

       三、原子更新引用类型

        原子更新基本类型的AtomicInteger,只能更新一个变量,如果要原子更新多个变量,就需要使用这个原子更新引用类型提供的类,Atomic包提供了以下3个类

          AtomicReference:原子更新引用类型

            AtomicReferenceFieldUpdater:原子更新引用类型里的字段

          AtomicMarkableReference:原子更新带有标记位的引用类型。可以原子更新一个布尔型标记位和引用类型。构造方法是AtomicMarkableReference((VinitialRef,boolean initialMark)

        以上几个类提供的方法几乎一样,所以本节仅以AtomicReference为例进行讲解,AtomicReference的使用示例代码

      四、原子更新字段类

      古国需要原子的更新某个类里面的某个字段时,就需要使用原子更新字段类,Atomic包提供了以下3个类进行原子字段的更新

       AtomicIntegerFieldUpdater:原子更新整型的字段更新器

       AtomicLongFieldUpdater:原子更新长整型字段更新器

        AtomicStampedReference:原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于原子的更新数据和数据的版本号,可以解决使用CAS进行原子更新时可能出现的ABA问题。

      要想院子的更新字段类需要两步:第一步,因为原子更新字段类都是抽象类,每次使用的时候必须使用静态方法newUpdater()创建一个更新器,并且需要设置想要更新的类和属性。第二步,更新类的字段(属性)必须使用public volatile修饰符。

      以上三个类提供的方法几乎一样,所以本节仅以AtomicIntegerFieldUpdater为例进行谅解,AtomicIntegerFieldUpdater为例

      

      

  • 相关阅读:
    Laravel 初始化
    ant design pro 左上角 logo 修改
    请求到服务端后是怎么处理的
    Websocket 知识点
    王道数据结构 (7) KMP 算法
    王道数据结构 (6) 简单的模式匹配算法
    王道数据结构 (4) 单链表 删除节点
    王道数据结构 (3) 单链表 插入节点
    王道数据结构 (2) 单链表 尾插法
    王道数据结构 (1) 单链表 头插法
  • 原文地址:https://www.cnblogs.com/hanxue112253/p/7837663.html
Copyright © 2011-2022 走看看