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语 ...
随机推荐
- 修改字段字符集 mysql 修改 锁表 show processlist; 查看进程 Waiting for table metadata lock
ALTER TABLE `question` MODIFY COLUMN `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unico ...
- Squirrel语言初探(可以使用VC6或者MinGW编译)
Squirrel语言初探 为啥我要关注Squirrel语言?原来Squirrel就很像我希望设计出的理想中的语言(当然也不完全符合).比如我觉得Lua的语法表述不清晰,累赘,于是想用C系语法来代替Lu ...
- django-mvc
而对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序.服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理.应用程序则负责具体的逻辑处 ...
- python面向对象(类的成员及类方法)
类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法 类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...
- Mybatis三剑客之mybatis-generator配置
mybatis插件在这里: 然后把generatorConfig.xml文件放在resources下: <?xml version="1.0" encoding=" ...
- SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行(转)
我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较常规的一种做法.但是这样做实现起来非常复杂,而在SqlSe ...
- google浏览器插件安装
1:安装本地插件,直接将下载好的crx插件拖入到 chrome://extensions/ 的空白处 http://www.cnplugins.com/tool/outline-instal ...
- PAT 1102 Invert a Binary Tree[比较简单]
1102 Invert a Binary Tree(25 分) The following is from Max Howell @twitter: Google: 90% of our engine ...
- pyenv常用命令
pyenv使用教程 安装 Mac brew install pyenv brew install pyenv-virtualenv 配置 echo 'eval "$(pyenv init - ...
- linux 服务器部署的web项目存入数据库的时间不正确
在linux获取当前时间 date 获取的时间是正常的 ----- java写了个测试类 public class TestDate { public static void main(String[ ...