当前位置: 首页 > news >正文

word上下页边距怎么调/福建seo优化

word上下页边距怎么调,福建seo优化,网站风格定位,运维为什么没人干基本类: AtomicIntegerAtomicLongAtomicBoolean数组类型: AtomicIntegerArrayAtomicLongArrayAtomicReferenceArray介绍 由于在多线程条件下,如果对共享变量修改容易造成数据不一致的情况,所以对于共享变量需要保证线程安全有有如…
  • 基本类:
    • AtomicInteger
    • AtomicLong
    • AtomicBoolean
  • 数组类型:
    • AtomicIntegerArray
    • AtomicLongArray
    • AtomicReferenceArray

介绍

由于在多线程条件下,如果对共享变量修改容易造成数据不一致的情况,所以对于共享变量需要保证线程安全有有如下几种方式:

  1. 使用lock或者synchronized进行同步共享变量
  2. 使用CAS方法来保证修改变量为原子性操作

该类为后者,基于CAS方式修改具有原子性。

实现原理

  1. 将boolean中的true转换成int类型表示:1表示true 0表示false
  2. 在类进行初始化的时候获取该值的内存地址
  3. 调用Unsafe.compareAndSwant方法底层通过CAS原理(CPU中cmpxchg指令)对值进行变化

917948-20190821235322890-2096423966.png

特点

  1. 基于CAS实现线程安全
  2. 实现了Cloneable接口,能被克隆
  3. 实现了Serializable接口,支持序列化传输

源码解析

成员变量

    private static final long serialVersionUID = 4654671469794556979L;// setup to use Unsafe.compareAndSwapInt for updates//使用unsafe类进行casprivate static final Unsafe unsafe = Unsafe.getUnsafe();//获取该值得偏移量(内存中的地址)private static final long valueOffset;/*** 内部使用int来做boolean的设置* 默认为0*/private  volatile int value;
  1. serialVersionUID:序列化ID
  2. unsafe:该类是Atomic中核心类,用于执行低级别,对内存进行操作,内部都是native方法
  3. valueOffset:字段value的内存偏移地址
  4. value:真实value,1表示true 0表示false,使用volatile保证内存可见性

类初始化过程

    static {try {//返回对象成员属性在内存地址相对于此对象的内存地址的偏移量valueOffset = unsafe.objectFieldOffset(AtomicBoolean.class.getDeclaredField("value"));} catch (Exception ex) { throw new Error(ex); }}

主要是通过unsafe方法获取value值得内存偏移地址

成员方法

get()

获取该boolean变量

    /*** 返回当前值*/public final boolean get() {return value != 0;}

boolean compareAndSet(boolean expect, boolean update)

比较前值后赋值,可能存在赋值失败的情况

     /** 只有当期待的值为expect的时候才会更新相关值*  1. 期待的值等于现在值,则成功赋值,返回true*  2. 期待的值不等于现在的值,则赋值失败,则返回false*/public final boolean compareAndSet(boolean expect, boolean update) {int e = expect ? 1 : 0;int u = update ? 1 : 0;return unsafe.compareAndSwapInt(this, valueOffset, e, u);}
  1. 将boolean转换成int类型
  2. 调用compareAndSwapInt进行CAS赋值
  3. 返回true则表示成功,false表示失败

boolean getAndSet(boolean newValue)

比较前值后进行赋值,用的相对较多

    public final boolean getAndSet(boolean newValue) {boolean prev;do {prev = get();} while (!compareAndSet(prev, newValue));return prev;}
  1. 先获取之前值
  2. 在调用循环compareAndSet进行CAS赋值

void set(boolean newValue)

无条件设置值,用的相对较少

    public final void set(boolean newValue) {value = newValue ? 1 : 0;}

void lazySet(boolean newValue)

也是赋值操作,该操作会让Java插入StoreStore内存屏障,避免发生写操作重排序

public final void lazySet(boolean newValue) {int v = newValue ? 1 : 0;unsafe.putOrderedInt(this, valueOffset, v);
}

总结

  1. 该类是原子性boolean类,是线程安全的
  2. 该原子类的核心操作都是基于Unsafe类
  3. CAS普遍会产ABA问题

转载于:https://www.cnblogs.com/lonecloud/p/11392032.html

http://www.jmfq.cn/news/5124385.html

相关文章:

  • 湖北网站推广技巧/最近的新闻有哪些
  • 淘宝客网站源码加各类插件/百度快照在哪里
  • 做一个网站成本是多少合适/沈阳seo网站关键词优化
  • 经典企业网站模板/营销策划公司 品牌策划公司
  • 58网站为啥做不好/产品优化是什么意思
  • 番禺是哪里/广州seo站内优化
  • 做鞋子的招聘网站有哪些/网站关键字优化软件
  • 泰安新闻频道在线直播/seo营销推广公司
  • 可以做推文的网站/推广普通话黑板报
  • 互联网与智慧酒店建设/seo程序专员
  • typora wordpress/东莞百度快照优化排名
  • 网页设计师中级证书有用吗/梁水才seo优化专家
  • 简洁的门户网站/seo关键词排名优化教程
  • 自动打开多个同网站网页/sem竞价托管费用
  • 网站欢迎屏怎么做/发外链的论坛
  • 淘宝seo搜索优化/西安企业seo外包服务公司
  • 瑞安app开发/seo外包公司哪家好
  • vs2013做网站/微信朋友圈广告推广代理
  • 上海找做网站公司好/互联网推广渠道有哪些
  • 上海市建交人才网/seo排名优化哪家好
  • 最好的做网站公司有哪些/电商推广和网络推广的区别
  • 中国工程建设标准化协会官方网站/产品如何做网络推广
  • 北京公司网站建设/百度 营销中心
  • 建站案例/武汉电脑培训学校有哪些
  • 自动生成网站地图怎么做/中山seo排名
  • 做铝锭的网站/搜索引擎有哪些平台
  • 哪个网站是专门做装修的/seo企业建站系统
  • 网页设计个人总结/唐山seo排名优化
  • 口碑好的网站建设公司哪家好/搜索引擎有哪些网站
  • 宿迁网站建设价格低/盐城seo网站优化软件