iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中怎么实现原子操作类
  • 362
分享到

Java中怎么实现原子操作类

2023-06-19 11:06:05 362人浏览 薄情痞子
摘要

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

这篇文章将为大家详细讲解有关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中怎么实现原子操作类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Java中怎么实现原子操作类

本文链接: https://www.lsjlt.com/news/295831.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Java中怎么实现原子操作类
    这篇文章将为大家详细讲解有关Java中怎么实现原子操作类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 一、引言在 JDK1.5 中新增 java.util.concurrent(...
    99+
    2023-06-19
  • Java多线程中原子性操作类怎么用
    小编给大家分享一下Java多线程中原子性操作类怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:在java5以后,我们接触到了线程原子性操作,也就是在修改...
    99+
    2023-06-25
  • Java原子操作类源码分析
    这篇文章主要介绍“Java原子操作类源码分析”,在日常操作中,相信很多人在Java原子操作类源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java原子操作类源码分析”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-30
  • DynamoDB怎么实现原子计数操作
    在DynamoDB中,可以使用原子计数操作来实现自增或自减操作。原子计数操作能够确保在高并发情况下,对于同一个数据项的自增或自减操作...
    99+
    2024-04-09
    DynamoDB
  • Java多线程 原子操作类详细
    目录1、What and Why2、原子更新基本类型类3、实现原理4、原子更新数组5、原子更新引用类型6、原子更新字段类1、What and Why 原子的本意是不能被分割的粒子,而...
    99+
    2024-04-02
  • java原子类实现的原理是什么
    Java原子类的实现原理是利用了底层的CAS(Compare and Swap)操作。CAS是一种乐观锁机制,它包含三个参数:内存位...
    99+
    2023-10-18
    java
  • Java多线程 原子性操作类的使用
    目录1. 基本类型的使用2. 数组类型的使用3. 引用类型的使用 4.字段类型的使用前言: 在java5以后,我们接触到了线程原子性操作,也就是在修改时我们只需要保证它的那个瞬间是安...
    99+
    2024-04-02
  • Java并发编程之原子操作类详情
    JUC包提供了一系列的原子性操作类,这些类都是使用非阻塞算法CAS实现的,相比使用锁实现原子性操作者在性能上有很大提升。JUC包中含有AtomicInteger、AtomicLong...
    99+
    2024-04-02
  • 什么是原子操作?深入浅析go中的原子操作
    在我们前面的一些介绍 sync 包相关的文章中,我们应该也发现了,其中有不少地方使用了原子操作。 比如 sync.WaitGroup、sync.Map 再到 sync.Pool,这些结构体的实现中都有原子操作的身影。 原子操作在并发编程中是...
    99+
    2023-05-14
    原子操作 后端 Go
  • Java多线程Atomic包操作原子变量与原子类的示例分析
    这篇文章主要介绍Java多线程Atomic包操作原子变量与原子类的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、何谓Atomic?Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的...
    99+
    2023-05-30
    java
  • go原子操作的方式及实现原理是什么
    今天小编给大家分享一下go原子操作的方式及实现原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是原子操作?原子操...
    99+
    2023-07-06
  • Java自增操作的原子性是什么
    这期内容当中小编将会给大家带来有关Java自增操作的原子性是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。最近在工作中和一个同事因为自增是不是原子性操作争论的面红耳赤,那Java的自增操作到底是不是原...
    99+
    2023-06-17
  • JDK8中新增的原子性操作类LongAdder详解
    前言本文主要给大家介绍了关于JDK8新增的原子性操作类LongAdder的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:LongAdder简单介绍LongAdder类似于AtomicLong是原子性递增或者递减类,...
    99+
    2023-05-31
    jdk8 原子性 操作类longadder
  • redis原子操作实例分析
    这篇“redis原子操作实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“redis原...
    99+
    2024-04-02
  • C#原子操作实例分析
    这篇文章主要讲解了“C#原子操作实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#原子操作实例分析”吧!知识点竞争条件当两个或两个以上的线程访问共享数据,并且尝试同时改变它时,就发生...
    99+
    2023-06-29
  • 什么是Java原子类
    这篇文章主要介绍“什么是Java原子类”,在日常操作中,相信很多人在什么是Java原子类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Java原子类”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Ja...
    99+
    2023-06-15
  • CountDownLatch和Atomic原子操作类源码分析
    本篇内容主要讲解“CountDownLatch和Atomic原子操作类源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CountDownLatch和Atomic原子操作类源码分析”吧!引导...
    99+
    2023-06-29
  • CountDownLatch和Atomic原子操作类源码解析
    目录引导语1、CountDownLatch1.1、await1.2、countDown1.3、示例2、Atomic原子操作类3、总结引导语 本小节和大家一起来看看 CountDown...
    99+
    2024-04-02
  • Java CAS与Atomic原子操作核心原理详解
    目录什么是原子操作CAS相关原子操作类的使用AtomicIntegerAtomicIntegerArray更新引用类型原子更新字段类LongAdder什么是原子操作 Mysql事务中...
    99+
    2023-05-16
    Java CAS与Atomic原子操作 Java CAS原子操作 Java Atomic原子操作
  • Java Thread类如何在子类中实现run
    这篇文章给大家介绍Java Thread类如何在子类中实现run,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java Thread类在我们的学习过程中有不少的问题,下面我们就看看如何才能更好学习呢?我们不妨设想,为了...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作