可以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicLong 可用在应用程序中(如以原子方式增加的序列号),并且不能用于替换 Long。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。

1.AtomicLong

  aaarticlea/png;base64,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" alt="" />

2.构造方法详解

AtomicLong

public AtomicLong(long initialValue)
创建具有给定初始值的新 AtomicLong。

参数:
initialValue - 初始值

AtomicLong

public AtomicLong()

创建具有初始值 0 的新 AtomicLong。

3.方法详解

get

public final long get()
获取当前值。

返回:
当前值

set

public final void set(long newValue)
设置为给定值。

参数:
newValue - 新值

lazySet

public final void lazySet(long newValue)
最后设置为给定值。

参数:
newValue - 新值
从以下版本开始:
1.6

getAndSet

public final long getAndSet(long newValue)
以原子方式设置为给定值,并返回旧值。

参数:
newValue - 新值
返回:
以前的值

compareAndSet

public final boolean compareAndSet(long expect,
long update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。

参数:
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。返回 false 指示实际值与预期值不相等。

weakCompareAndSet

public final boolean weakCompareAndSet(long expect,
long update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。

可能意外失败并且不提供排序保证,所以只能在很少的情况下对 compareAndSet 进行适当地选择。

参数:
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。

getAndIncrement

public final long getAndIncrement()
以原子方式将当前值加 1。

返回:
以前的值

getAndDecrement

public final long getAndDecrement()
以原子方式将当前值减 1。

返回:
以前的值

getAndAdd

public final long getAndAdd(long delta)
以原子方式将给定值添加到当前值。

参数:
delta - 要添加的值
返回:
以前的值

incrementAndGet

public final long incrementAndGet()
以原子方式将当前值加 1。

返回:
更新的值

decrementAndGet

public final long decrementAndGet()
以原子方式将当前值减 1。

返回:
更新的值

addAndGet

public final long addAndGet(long delta)
以原子方式将给定值添加到当前值。

参数:
delta - 要添加的值
返回:
更新的值

toString

public String toString()
返回当前值的字符串表示形式。

覆盖:
Object 中的 toString
返回:
当前值的字符串表示形式。

intValue

public int intValue()
从类 Number 复制的描述
int 形式返回指定的数值。这可能会涉及到舍入或取整。

指定者:
Number 中的 intValue
返回:
转换为 int 类型后该对象表示的数值。

longValue

public long longValue()
从类 Number 复制的描述
long 形式返回指定的数值。这可能涉及到舍入或取整。

指定者:
Number 中的 longValue
返回:
转换为 long 类型后该对象表示的数值。

floatValue

public float floatValue()
从类 Number 复制的描述
float 形式返回指定的数值。这可能会涉及到舍入。

指定者:
Number 中的 floatValue
返回:
转换为 float 类型后该对象表示的数值。

doubleValue

public double doubleValue()
从类 Number 复制的描述
double 形式返回指定的数值。这可能会涉及到舍入。

指定者:
Number 中的 doubleValue
返回:
转换为 double 类型后该对象表示的数值。

java并发编程:线程安全管理类--原子操作类--AtomicLong的更多相关文章

  1. java并发编程 线程基础

    java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...

  2. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...

  3. Java并发编程:线程间通信wait、notify

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  4. Java并发编程:线程和进程的创建(转)

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  5. java并发编程 | 线程详解

    个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...

  6. java并发编程系列二:原子操作/CAS

    什么是原子操作 不可被中断的一个或者一系列操作 实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作 CAS( Compare And Swap )  为什么要有CAS? Compar ...

  7. Java并发编程——线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  8. Java并发编程——线程池

    本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...

  9. Java并发编程(三)Thread类的使用

    一.线程的状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wait ...

  10. [转]JAVA并发编程学习笔记之Unsafe类

    1.通过Unsafe类可以分配内存,可以释放内存:类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语 ...

随机推荐

  1. Python开发【Tornado】:异步Web服务(二)

    真正的 Tornado 异步非阻塞 前言: 其中 Tornado 的定义是 Web 框架和异步网络库,其中他具备有异步非阻塞能力,能解决他两个框架请求阻塞的问题,在需要并发能力时候就应该使用 Torn ...

  2. Linux下编译安装PHP扩展memcached

    [安装 libevent] $ tar zxvf libevent-2.0.20-stable.tar.gz $ cd libevent-2.0.20-stable/$ ./configure --p ...

  3. JDK eclipse selenium的安装以及环境变量的配置

    未经允许,禁止转载!!!  未经允许,禁止转载!!! 首先下载安装JDK: 然后双击进行安装 选着第一个:开发工具!点击next 一定要记住:Install to: C:\Program Files\ ...

  4. python selenium 安装与 chromedriver安装

    安装 pip install selenium 安装完成之后运行脚本,如果没报错那ok.但是很不幸运,我报错啦.(本人使用ubuntu16.04,python2,or python3) 贴出我的报错: ...

  5. Vector、List、LinkedList

    Vector 遍历 Vector<String> vestor =new Vector<String>(); vestor.add("qq"); vesto ...

  6. tp模板基础

    目录简介 创建应用 在项目目录创建入口文件shop/index.php 创建虚拟主机,访问应 路由形式 路由: 系统从URL参数中分析出当前请求的分组.控制器.和操作的过程就是“路由”. Tp框架路由 ...

  7. Python:笔记(7)——yield关键字

    Python:笔记(7)——yield关键字 yield与生成器 所谓生成器是一个函数,它可以生成一个值的序列,以便在迭代中使用.函数使用yield关键字可以定义生成器对象. 一个例子 我们调用该函数 ...

  8. 004-notepad++安装。

    1.下载地址. 官网:https://notepad-plus-plus.org/ 2.安装.

  9. 文件上传—SSH框架文件上传

    1.准备上传的api组件 <dependency> <groupId>commons-io</groupId> <artifactId>commons- ...

  10. Mybatis-plus之RowBounds实现分页查询

    物理分页和逻辑分页 物理分页:直接从数据库中拿出我们需要的数据,例如在Mysql中使用limit. 逻辑分页:从数据库中拿出所有符合要求的数据,然后再从这些数据中拿到我们需要的分页数据. 优缺点 物理 ...