java并发-原子性

java实现原子性

java.util.concurrent.atomic 包中提供了很多高级的指令,来保证操作的原子性 Atomiclnteger 类提供了方法 incrementAndGet 用来自增

public static AtomicLong nextNumber = new AtomicLong();
long id = nextNumber.incrementAndGet()

incrementAndGet 方法以原子方式将 AtomicLong 自增, 并返回自增后的值。

如果更复杂的更新可以使用compareAndSet方法 实现跟踪线程并观察最大值

  do {
      oldValue = largest.get();
      newValue = Max.max(oldValue,newValue);
  }while(!largest.compareAndSet(oldValue, newValue))

java8 可以使用循环表达式 largest.updateAndGet(x -> Math.max(x, observed));

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Golang语言社区】源码篇--sync包map

早晨看到知乎上一篇介绍Go1.9X版本部分功能,特产关注了一下;把源码想给大家呈现下,实际测试请看下一篇文章:Go语言sync.map 实际测...

367100
来自专栏菩提树下的杨过

[c#]Webservice中如何实现方法重载(overload)以及如何传送不能序列化的对象作参数

1。Webservice中的方法重载问题 (1)在要重载的WebMethod上打个MessageName标签 比如: [WebMethod(Message...

198100
来自专栏互联网研发闲思录

基于jdk1.7实现的excel导出工具类

通用excel导出工具类,基于泛型、反射、hashmap 以及基于泛型、反射、bean两种方式 import java.io.*; import java.la...

29100
来自专栏码匠的流水账

聊聊resilience4j的fallback

vavr-0.9.2-sources.jar!/io/vavr/control/Try.java

24510
来自专栏鸿的学习笔记

Python写的Python解释器(五)

条件和循环 到目前为止,解释器仅仅只是简单的逐个执行指令。下面将会讲述需要多次执行某些指令,或者在特定条件下跳过它们的做法。在代码中编写循环和if语句时,解释器...

11820
来自专栏杨龙飞前端

js,timeout,promise执行顺序

27420
来自专栏java、Spring、技术分享

java应用CAS

  CAS(Compare and Swap),即比较并替换。jdk里的大量源码通过CAS来提供线程安全操作,比如AtomicInteger类。下面我们来分析一...

15530
来自专栏跟着阿笨一起玩NET

[C#]工具类—FTP上传下载

  不错的文章:http://www.cnblogs.com/greatverve/archive/2012/03/03/csharp-ftp.html

36310
来自专栏五毛程序员

五毛的cocos2d-x学习笔记05-场景与场景动画,动作

19260
来自专栏码匠的流水账

聊聊flink的CheckpointScheduler

flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/checkpoint/Checkp...

18830

扫码关注云+社区

领取腾讯云代金券