Java的java.util.concurrent包除了提供底层锁、并发集合外,还提供了一组原子操作的封装类,它们位于java.util.concurrent.atomic包。

我们以AtomicInteger为例,它提供的主要操作有:

增加值并返回新值:int addAndGet(int delta)

加1后返回新值:int incrementAndGet()

获取当前值:int get()

用CAS方式设置:int compareAndSet(int expect, int update)

Atomic类是通过无锁(lock-free)的方式实现的线程安全(thread-safe)访问。它的主要原理是利用了CAS:Compare and Set。

如果我们自己通过CAS编写incrementAndGet(),它大概长这样:

public int incrementAndGet(AtomicInteger var) {

int prev, next;

do {

prev = var.get();

next = prev + 1;

} while ( ! var.compareAndSet(prev, next));

return next;

}

CAS是指,在这个操作中,如果AtomicInteger的当前值是prev,那么就更新为next,返回true。如果AtomicInteger的当前值不是prev,就什么也不干,返回false。通过CAS操作并配合do ... while循环,即使其他线程修改了AtomicInteger的值,最终的结果也是正确的。

我们利用AtomicLong可以编写一个多线程安全的全局唯一ID生成器:

class IdGenerator {

AtomicLong var = new AtomicLong(0);

public long getNextId() {

return var.incrementAndGet();

}

}

通常情况下,我们并不需要直接用do ... while循环调用compareAndSet实现复杂的并发操作,而是用incrementAndGet()这样的封装好的方法,因此,使用起来非常简单。

在高度竞争的情况下,还可以使用Java 8提供的LongAdder和LongAccumulator。

小结

使用java.util.concurrent.atomic提供的原子操作可以简化多线程编程:

原子操作实现了无锁的线程安全;

适用于计数器,累加器等。

python将数据导入数据库 atomic_使用Atomic相关推荐

  1. python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案

    [问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...

  2. python接入excel_使用python将excel数据导入数据库过程详解

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

  3. 将excel中是数据导入数据库

    2019独角兽企业重金招聘Python工程师标准>>> 将excel中是数据导入数据库 1.利用excel生成sql语句: 列如: 1).insert: =CONCATENATE(& ...

  4. Python使用Pandas导入数据库sql

    Python使用Pandas导入数据库sql 一.前言 二.准备工作 三.从数据库导入数据到Pandas 一.前言 对于关系数据库的访问,Python社区已经制定出一个标准,称为Python Data ...

  5. eplise怎么连接数据库_基于手机信令的大数据分析教程(一)数据导入数据库

    前言 该套教程以一个初学大数据的菜鸟视角,编写数据分析处理的整套流程.写得较为详(luo)细(suo),希望适用于任何城乡规划大数据的初学者.持续更新中,若有错误,望指正! 1.任务总纲 (1)职住数 ...

  6. 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  7. 从EXCEL文件将数据导入数据库的向导程序设计!

    原创文章,转载请注明出处! 最近在做一个向导程序,希望把EXCEL表中数据导入数据库,首先是选择数据源.字段匹配最后进行数据检验和错误设置!类的关系比较复杂,希望理清类与类之间的关系.程序的架构有些像 ...

  8. Excel数据导入数据库(Java)

    Excel 文件数据导入数据库 首先说明下读写Excel三种常用的技术: POI : 效率高,操作相对JXL复杂,支持公式,宏,图像图表,一些企业应用上会比较实用.能够修饰单元格属性.字体 数字 日期 ...

  9. ssis 导入excel_使用SSIS包将MS Excel数据导入数据库

    ssis 导入excel The easiest way to import the data into the SQL database is using the Import Data wizar ...

  10. CAD数据导入数据库

    CAD数据导入数据库 1.读取CAD数据 分层读取CAD数据 /// <summary>/// 获取CAD图层(点线面)/// </summary>/// <param ...

最新文章

  1. HTML5表单元素禁用,禁用HTML5表单元素的验证
  2. ubuntu 12.04 解压安装jdk
  3. 为什么薄膜干涉的厚度要很小_薄膜干涉的薄膜为什么不能太厚?1.这里的厚是用什么来衡量的?2.假如一个厚为1mm的薄膜,是否薄?...
  4. angularjs的$on、$emit、$broadcast
  5. Altium Designer导入pcb原件之后都是绿的
  6. python汉诺塔_汉诺塔递归算法/搬金盘的婆罗门 - Python实现
  7. 矢量归一化_浅析矢量网络分析仪误差模型及校准
  8. ubuntu 下重装mysql若干问题
  9. ICCV2021 还在用大量数据暴力train模型?主动学习,教你选出数据集中最有价值的样本...
  10. 钱 | 钱,钱,钱,钱,钱,钱,钱!钱啊钱!(配音乐)
  11. 什么是网络计算机有什么优点,ISDN是什么?它有什么优点?
  12. 查询SQL最近一次启动时间
  13. 数据库中的左连接和右连接的区别
  14. 【24计算机考研】备考前必须了解的避坑小知识,建议收藏
  15. 淘宝商品关键词搜索排名查询
  16. CSGO控制台与常用指令
  17. 别人看我真威风,我羡别人好轻松
  18. 将数字上调至8的倍数
  19. 移民去欧洲,选哪个国家好呢?
  20. 谷歌浏览器代理服务器有问题

热门文章

  1. 哪里可以在线转二维码?
  2. linux开启443端口
  3. Win11更改系统文件夹的默认保存位置方法分享
  4. 正版软件 - AxMath 专业的数学公式编辑器带计算功能 数学公式编辑器首选工具
  5. LoadRunner “add measurements”(添加度量)菜单问题
  6. 大智慧行情服务器文件夹,大智慧行情分析系统炒股软件常用三大菜单操作
  7. 智能名片小程序创建名片页功能实现关键代码
  8. zookeeper 集群 + kafka 集群 : 安装部署(附单机部署)
  9. 河套学院2018级计算机一级考试,河套学院2018-2019学年本科生就业率
  10. 火狐浏览器上网速度慢解决方法