原子类型AtomicLong用法探究

简介: AtomicLong 是 Java 提供的一个原子长整型类,提供了对长整型数据的原子性操作。在多线程环境下,AtomicLong 可以确保对长整型数据的操作是线程安全的。

AtomicLong探究

AtomicLong 是 Java 提供的一个原子长整型类,提供了对长整型数据的原子性操作。在多线程环境下,AtomicLong 可以确保对长整型数据的操作是线程安全的。


在 Android 中,AtomicLong 的使用方法和功能与标准 Java 中的 AtomicLong 相同。你可以通过以下方式创建一个 AtomicLong 对象:

AtomicLong atomicLong = new AtomicLong(initialValue);

上述代码,initialValueAtomicLong 对象的初始值。


一旦创建了 AtomicLong 对象,你可以使用以下方法对其进行操作:


  • get():获取当前的值。
  • set(long newValue):设置新的值。
  • getAndSet(long newValue):获取当前的值并设置新的值。
  • compareAndSet(long expect, long update):如果当前值等于 expect,则将值设置为 update
  • getAndIncrement():获取当前的值并增加 1。
  • getAndDecrement():获取当前的值并减少 1。
  • incrementAndGet():增加当前的值并获取新的值。
  • decrementAndGet():减少当前的值并获取新的值。


这些方法都提供了对 AtomicLong 对象的原子性操作,确保在多线程环境下的数据安全性。


AtomicLong 的 Android 代码示例:

import java.util.concurrent.atomic.AtomicLong;  
public class MyAtomicLong {  
    private static AtomicLong counter = new AtomicLong(0);  
    public static void main(String[] args) {  
        // 创建两个线程同时执行操作  
        Thread thread1 = new Thread(new MyRunnable());  
        Thread thread2 = new Thread(new MyRunnable());  
        thread1.start();  
        thread2.start();  
    }  
    private static class MyRunnable implements Runnable {  
        @Override  
        public void run() {  
            // 每次递增 1  
            long value = counter.incrementAndGet();  
            System.out.println("Value: " + value);  
        }  
    }  
}

在这个示例中,我们创建了一个 AtomicLong 对象 counter,并使用 incrementAndGet() 方法对其进行递增操作。然后,我们创建两个线程并启动它们,同时对 counter 进行操作。由于 AtomicLong 的原子性操作,我们可以在多线程环境下安全地递增 counter,避免了竞态条件的问题。

AtomicLong和LongAddr区别

AtomicLong 是基于 CAS 方式自旋更新的;LongAdder 是把 value 分成若干cell,并发量低的时候,直接 CAS 更新值,成功即结束。


并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。


取值的时候,调用 sum() 方法进行每个cell累加。 AtomicLong 包含有原子性的读、写结合的api;LongAdder 没有原子性的读、写结合的api,能保证结果最终一致性。 低并发场景AtomicLong 和 LongAdder 性能相似,高并发场景 LongAdder 性能优于 AtomicLong。

相关文章
|
存储 安全 算法
【接口加密】Java中的接口加密实践
【接口加密】Java中的接口加密实践
|
Android开发
Android中如何动态的调整Dialog的背景深暗
在Android开发中,Dialog和DialogFragment可通过设置`Window`的`backgroundDimAmount`来控制背景变暗,突出对话框。在DialogFragment的`onCreateDialog`或`onViewCreated`中,获取`Dialog`的`Window`,设置`LayoutParams.dimAmount`(例如0.5f)并添加`FLAG_DIM_BEHIND`标志。要动态调整,可保存`LayoutParams`并在需要时更新。对于Dialog,创建时直接设置同样属性。还可以通过定义主题样式设置背景模糊程度。
660 7
|
存储 前端开发 开发者
深入了解 Sass 和 SCSS:CSS 预处理器的强大功能
Sass(Syntactically Awesome Stylesheets)是一个强大的 CSS 预处理器,为开发者提供了诸多高级特性,如变量、嵌套、混合、继承等,简化了 CSS 的编写和管理。SCSS 是 Sass 3 引入的新语法,完全兼容 CSS3,并增强了 Sass 的动态功能。本文详细介绍了 Sass 和 SCSS 的核心特性及其在实际开发中的应用,如变量定义、嵌套规则、混合、继承、以及常用的操作符与扩展功能。
625 0
|
消息中间件 监控 负载均衡
深入解析Kafka中的Lag现象
深入解析Kafka中的Lag现象
1762 0
|
Java 数据处理
Java8的新特性parallelStream()的概念、对比线程优势与实战
parallelStream() 是 Java 8 中新增的一个方法,它是 Stream 类的一种扩展,提供了将集合数据并行处理的能力。普通的 stream() 方法是使用单线程对集合数据进行顺序处理,而 parallelStream() 方法则可以将集合数据分成多个小块,分配到多个线程并行处理,从而提高程序的执行效率。
1207 3
|
Java 应用服务中间件 HSF
走进HSF源码
前言本文源自一次组内分享,于是接着这个机会,将HSF的源码阅读过程记录下来,以供自己温故而知新。如果有哪些地方理解不到位的,还请诸位批评指正!简介HSF (High-speed Service Framework),高速服务框架,是在阿里巴巴内部广泛使用的分布式RPC服务框架。众所周知,HSF一款与我们的日常生活密不可分的RPC框架;所谓RPC——远程过程调用,就是指像调用本地方法一样调用远程的方
1908 0
走进HSF源码
|
应用服务中间件 Linux nginx
【Nginx用法】Nginx停止服务和各种命令
【Nginx用法】Nginx停止服务和各种命令
1827 0
|
数据挖掘 Python
Python|详解Python中的axis参数
详解Python(Pandas/Numpy)中的axis参数
Python|详解Python中的axis参数
|
算法 自动驾驶 机器人
基于RRT算法的最优动力学路径规划(Matlab代码实现)
基于RRT算法的最优动力学路径规划(Matlab代码实现)
476 0
|
开发工具 Android开发
Android SDK Manager无法显示可供下载的未安装SDK解决方案
Android SDK Manager无法显示可供下载的未安装SDK解决方案
910 0
下一篇
开通oss服务