我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中怎么实现原子操作类

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中怎么实现原子操作类

这篇文章将为大家详细讲解有关Java中怎么实现原子操作类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

 

一、引言

在 JDK1.5 中新增 java.util.concurrent(J.U.C) 包,它建立在 CAS 之上。CAS 是非阻塞算法的一种常见实现,相对于 synchronized 这种阻塞算法,它的性能更好。

DK1.5 中引入了底层的支持,在 int、long 和对象的引用等类型上都公开了 CAS 的操作,并且 JVM 把它们编译为底层硬件提供的最有效的方法,在运行 CAS 的平台上,运行时把它们编译为相应的机器指令。在 java.util.concurrent.atomic 包下面的所有的原子变量类型中,比如 AtomicInteger,都使用了这些底层的JVM支持为数字类型的引用类型提供一种高效的 CAS 操作。


二、Java原子类介绍

atomic 包中的 13 个类,属于 4 种类型的原子更新方式.

  • (1)原子更新基本类型

  • (2)原子更新数组

  • (3)原子更新引用

  • (4)原子更新属性

atomic 包里的类基本都是使用 Unsafe 实现的包装类.

 

1.原子更新基本类型

  • AtomicBoolean:原子更新布尔类型。

  • AtomicInteger:原子更新整型。

  • AtomicLong:原子更新长整型。

本类以 AtomicInteger 进行讲解:

AtomicInteger 是一个支持原子操作的 Integer 类,就是保证对 AtomicInteger 类型变量的增加和减少操作是原子性的,不会出现多个线程下的数据不一致问题。如果不使用 AtomicInteger,要实现一个按顺序获取的 ID,就必须在每次获取时进行加锁操作,以避免出现并发时获取到同样的 ID 的现象。

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

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

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

  • void lazySet(int newValue) 最终会设置成 newValue,使用 lazySet 设置值后,可能导致其他线程在之后的一小段时间内还是可以读到 旧值;

  • int getAndSet(int newValue) 以原子方式设置为 newValue 的值,并返回旧值。

那么getAndIncrement 是如何实现原子操作的呢?

1public final int getAndIncrement() { 
2    for (;;) { 
3        int current = get(); 
4        int next = current + 1; 
5        if (compareAndSet(current, next)) 
6            return current; 
7    } 
8}

关于Java中怎么实现原子操作类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中怎么实现原子操作类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中怎么实现原子操作类

这篇文章将为大家详细讲解有关Java中怎么实现原子操作类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 一、引言在 JDK1.5 中新增 java.util.concurrent(J.U.C
2023-06-19

Java多线程中原子性操作类怎么用

小编给大家分享一下Java多线程中原子性操作类怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:在java5以后,我们接触到了线程原子性操作,也就是在修改
2023-06-25

Java原子操作类源码分析

这篇文章主要介绍“Java原子操作类源码分析”,在日常操作中,相信很多人在Java原子操作类源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java原子操作类源码分析”的疑惑有所帮助!接下来,请跟着小编
2023-06-30

DynamoDB怎么实现原子计数操作

在DynamoDB中,可以使用原子计数操作来实现自增或自减操作。原子计数操作能够确保在高并发情况下,对于同一个数据项的自增或自减操作不会发生冲突。要实现原子计数操作,可以使用UpdateItem API并设置UpdateExpressio
DynamoDB怎么实现原子计数操作
2024-04-09

java原子类实现的原理是什么

Java原子类的实现原理是利用了底层的CAS(Compare and Swap)操作。CAS是一种乐观锁机制,它包含三个参数:内存位置V,旧的预期值A和新的值B。CAS操作首先将内存位置V的值与预期值A进行比较,如果相等,则将内存位置V的值
2023-10-18

Java多线程Atomic包操作原子变量与原子类的示例分析

这篇文章主要介绍Java多线程Atomic包操作原子变量与原子类的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、何谓Atomic?Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的
2023-05-30

go原子操作的方式及实现原理是什么

今天小编给大家分享一下go原子操作的方式及实现原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是原子操作?原子操
2023-07-06

Java自增操作的原子性是什么

这期内容当中小编将会给大家带来有关Java自增操作的原子性是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。最近在工作中和一个同事因为自增是不是原子性操作争论的面红耳赤,那Java的自增操作到底是不是原
2023-06-17

JDK8中新增的原子性操作类LongAdder详解

前言本文主要给大家介绍了关于JDK8新增的原子性操作类LongAdder的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:LongAdder简单介绍LongAdder类似于AtomicLong是原子性递增或者递减类,
2023-05-31

Java Thread类如何在子类中实现run

这篇文章给大家介绍Java Thread类如何在子类中实现run,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java Thread类在我们的学习过程中有不少的问题,下面我们就看看如何才能更好学习呢?我们不妨设想,为了
2023-06-17

C#中怎么实现一个数据库操作类

这期内容当中小编将会给大家带来有关C#中怎么实现一个数据库操作类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#数据库操作类主要包括两类方法:一类用来直接执行SQL语句,另一类用来执行存储过程。其中的数
2023-06-17

Java文件操作类 File实现代码

1.概述  对于文件系统的访问是每个语言必须的,java提供了File类来完成对文件或者目录的创建,重命名,删除,文件列表的操作以及判读是否存在。2.对于文件/目录的操作  操作内容包括:    1:创建对象。    2:判断是否是目录/文
2023-05-31

Java中怎么实现文件的读写操作

在Java中,文件的读写操作可以通过使用Java I/O库来实现。以下是一些常用的方法:使用FileInputStream和FileOutputStream类来读写文件// 读取文件try (FileInputStream fis = n
Java中怎么实现文件的读写操作
2024-03-05

Java怎么实现的文本字符串操作工具类实例

这篇文章将为大家详细讲解有关Java怎么实现的文本字符串操作工具类实例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文实例讲述了Java实现的文本字符串操作工具类。分享给大家供大家参考,具体如下:pac
2023-05-30

java自动创建子类对象怎么实现

在Java中,可以通过继承和实现接口来自动创建子类对象。1. 继承:子类通过继承父类,可以自动获得父类的属性和方法。使用关键字`extends`指定父类,子类可以通过`super`关键字调用父类的构造方法和方法。```javaclass P
2023-09-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录