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

小满crm/山东seo百度推广

小满crm,山东seo百度推广,食品批发网,教育培训网站案例我们之前提到了,例如volatile标识的变量是没有办法保证在应用层面的原子性的,例如i。因此通常我们会使用synchronized来解决这个问题,synchronized会保证多线程不会同时更新变量i。而Java从JDK 1.5开始提供了java.util.concurrent.atomic包&a…

956f6009c5b0a7a282c3c92c4591673e.png

我们之前提到了,例如volatile标识的变量是没有办法保证在应用层面的原子性的,例如i++。因此通常我们会使用synchronized来解决这个问题,synchronized会保证多线程不会同时更新变量i。

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

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


原子基础类型

AtomicBoolean:原子更新布尔类型。

AtomicInteger:原子更新整型。

AtomicLong:原子更新长整型。

这三个很像,这里我们以AtomicInteger为例,看看它是怎么实现原子性的:

v2-936fe6aa3cf1d227bd533af2ff61741c_b.jpg

本质上就是volatile+unsafe类中的方法。

常用方法:

int addAndGet(int delta):以原子方式将输入的数值与实例中的值(AtomicInteger里的value)相加,并返回结果。

boolean compareAndSet(int expect,int update):如果输入的数值等于预期值,则以原子方式将该值设置为输入的值。

int getAndIncrement():以原子方式将当前值加1,注意,这里返回的是自增前的值。

void lazySet(int newValue):最终会设置成newValue,使用lazySet设置值后,可能导致其他

线程在之后的一小段时间内还是可以读到旧的值。

这里lazySet有一点难搞:

Doug Lea大大说了, lazySet()省去了StoreLoad屏障, 只留下StoreStore

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6275329​bugs.java.com

把最耗性能的StoreLoad拿掉, 性能必然会提高不少(虽然不能禁止写读的重排序了保证不了可见性, 但给其他应用场景提供了更好的选择, 比如上边连接中Doug Lea举例的场景)。

原子更新数组

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

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

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

AtomicIntegerArray类主要是提供原子的方式更新数组里的整型

常用方法如下。

int addAndGet(int i,int delta):以原子方式将输入值与数组中索引i的元素相加。

·boolean compareAndSet(int i,int expect,int update):如果当前值等于预期值,则以原子方式将数组位置i的元素设置成update值。

原子更新引用类型

AtomicReference:原子更新引用类型。

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

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

cc34c2873125e08dada27d82ddf9cdd1.png

原子更新字段类

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

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

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

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

89a947ab79dbe1bb9a2b94db4bdc3ecb.png
http://www.lbrq.cn/news/1425151.html

相关文章:

  • 怎么免费建设金融网站/制定营销推广方案
  • 哪里可以做网站/哪家公司做推广优化好
  • 网站什么认证对做电商好/搜索引擎优化的方法包括
  • 做众筹网站要什么资质/线上线下一体化营销
  • 免费的行情网站app软件推荐/今天的三个新闻
  • 武汉公司网站推广/新乡网站优化公司推荐
  • 如何做品牌网站设计/福州短视频seo平台
  • 在线制作图片美图/网站排名优化查询
  • 外贸网站推广收费/百度官网首页登录
  • 网站域名续费/搜索引擎下载入口
  • 建设公司网站源码/优化大师优化项目有
  • 网站开发的总结/网站建设包括哪些内容
  • 妇科医院手机网站源码/在线培训平台有哪些
  • wordpress消息通知/长沙专业竞价优化首选
  • 基于j2ee的网站开发设计开题报告/视频号的链接在哪
  • 做销售的去哪个网站应聘/网站开发建站
  • 生日祝福网页链接制作/seo关键词优化案例
  • 网站建设有必要做手机端吗/查淘宝关键词排名软件有哪些
  • 网站建设寮步/关键词怎么优化到百度首页
  • 中英文网站模板下载/深圳优化公司样高粱seo
  • 高港网站建设/搜索关键词排行榜
  • 网站构架怎么做/网站搭建策略与方法
  • 网站搭建的流程及费用是多少?/网站安全检测
  • 中英文网站怎么做的/企业关键词优化推荐
  • 南通制作网站的有哪些公司/河北网站优化公司
  • wordpress数字主题/aso搜索优化
  • 天津做网站外包公司有哪些/百度如何推广广告
  • 做农业网站/360收录提交
  • 做网站用哪个软件最好php/站长检测工具
  • 互动创意网站/seo到底是做什么的
  • 深入详解PCB布局布线技巧-去耦电容的摆放位置
  • 【科研绘图系列】R语言在DOM再矿化数据分析与可视化中的应用
  • 【php反序列化介绍与常见触发方法】
  • PowerShell 格式化系统完全掌握(下):自定义列/格式字符串/对齐与宽度 + 实战模板
  • 达梦数据库使用控制台disql执行脚本
  • 解决ECharts图表上显示的最小刻度不是设置的min值的问题