java并发编程:线程安全管理类--原子操作类--AtomicLong
可以用原子方式更新的 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()
intValue
public int intValue()
longValue
public long longValue()
floatValue
public float floatValue()
- 从类
Number复制的描述 - 以
float形式返回指定的数值。这可能会涉及到舍入。 -
- 指定者:
- 类
Number中的floatValue
-
- 返回:
- 转换为
float类型后该对象表示的数值。
doubleValue
public double doubleValue()
- 从类
Number复制的描述 - 以
double形式返回指定的数值。这可能会涉及到舍入。 -
- 指定者:
- 类
Number中的doubleValue
-
- 返回:
- 转换为
double类型后该对象表示的数值。
java并发编程:线程安全管理类--原子操作类--AtomicLong的更多相关文章
- java并发编程 线程基础
java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...
- Java 并发编程 | 线程池详解
原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...
- Java并发编程:线程间通信wait、notify
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- Java并发编程:线程和进程的创建(转)
Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...
- java并发编程 | 线程详解
个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...
- java并发编程系列二:原子操作/CAS
什么是原子操作 不可被中断的一个或者一系列操作 实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作 CAS( Compare And Swap ) 为什么要有CAS? Compar ...
- Java并发编程——线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- Java并发编程——线程池
本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...
- Java并发编程(三)Thread类的使用
一.线程的状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wait ...
- [转]JAVA并发编程学习笔记之Unsafe类
1.通过Unsafe类可以分配内存,可以释放内存:类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语 ...
随机推荐
- Django - rest - framework - 下
一.视图三部曲 https://www.cnblogs.com/wupeiqi/articles/7805382.html 使用混合(mixins) 之前得视图部分 # urls.py from dj ...
- android:layout_gravity 和 android:gravity
android:layout_gravity和 android:gravity的区别,android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着 换个属性设置,不过不设置默认是在 ...
- testng日志和报告
TestNG是通过 Listeners 或者 Reporters 生成测试报告. Listeners,即 org.testng.ITestListener 的实现,能够在测试执行过程中发出各种测试结果 ...
- Scrapy:学习笔记(1)——XPath
Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...
- EditPlus 4.3.2473 中文版已经发布(10月21日更新)
新的 EditPlus 修复了如下问题: * Ctrl+鼠标拖放文本功能异常 * 上传文件到 FTP 服务器失败后将弹出对话框,可重试上传 * 列选模式下粘贴到现存的选中内容时文本错乱的问题 本博客已 ...
- 文件读写网络IO简单了解,同步IO和异步IO
在Linux中,对文件的读写其实就是IO. 与IO有关的名词:同步,异步,阻塞,非阻塞,甚至是同步阻塞,同步非阻塞,异步阻塞,异步非阻塞.别急,下面有举例IO分为两大种,同步和异步 同步IO:阻塞IO ...
- 再论Splay
联赛前为了填知识点,简单学了一下比较常用的高级数据结构,都没有太深入的理解,于是现在重新搞一遍. 其实有了set和multiset,那么我们就没有再手写平衡树的必要了,所以treap的应用就相对于Sp ...
- 20145312《网络对抗》 逆向及Bof基础实践
20145312 <网络对抗> 逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...
- 线程访问ui,使用委托方式
转:https://www.cnblogs.com/muyoucai/p/6257213.html Control类提供了一个Invoke方法来给子线程访问主线程的控件,它的原型是酱紫的: objec ...
- 框架-springmvc源码分析(二)
框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftth ...