AtomicInteger 的使用

为什么需要java.util.concurrent.atomic.AtomicInteger

++i,–i 不是线程安全的,涉及到三步,1、获取 i 值 2、进行运算 3、写回新值 。多线程情况下,结果超出预期。

AtomicInteger 提供了哪些方法

代码注释里标明了提供的方法。边使用,边熟悉。

import static org.junit.Assert.*;
import java.util.concurrent.atomic.AtomicInteger;public class Test {public static void main(String args[]) throws InterruptedException {final AtomicInteger value = new AtomicInteger(10);//获取值assertEquals(value.get(),10);//设置值value.set(5);assertEquals(value.get(),5);//比较并设置// 当前跟预期比较,不相等不更新。assertEquals(value.compareAndSet(3, 2), false);assertEquals(value.get(), 5);// 当前跟预期比较,相等更新。assertEquals(value.compareAndSet(5, 2), true);assertEquals(value.get(), 2);//++iassertEquals(value.incrementAndGet(), 3);//+nassertEquals(value.getAndAdd(5),3);assertEquals(value.get(),8);//i++assertEquals(value.getAndIncrement(),8);assertEquals(value.get(),9);//+nassertEquals(value.addAndGet(2),11);//--iassertEquals(value.decrementAndGet(),10);//i--assertEquals(value.getAndDecrement(),10);assertEquals(value.get(),9);//i==nassertEquals(value.getAndSet(6),9);assertEquals(value.get(),6);}
}

验证AtomicInteger 线程安全

import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
class Test {static int ivalue = 10;public static void main(String args[]) throws InterruptedException {//使用 AtomicInteger,线程安全//普通的 ++i,线程不安全final AtomicInteger value = new AtomicInteger(10);final int threadSize = 50000;Thread[] t = new Thread[threadSize];for(int i=0;i<threadSize;i++){t[i] = new Thread(){@Overridepublic void run(){value.incrementAndGet();++ivalue;}};}for(Thread tt :t){tt.start();}for(Thread tt: t){tt.join();}assertEquals(value.get(),threadSize+10);//trueassertEquals(ivalue,threadSize+10);//线程足够多时,false}
}

AtomicInteger 的使用相关推荐

  1. LeetCode 1195. Fizz Buzz Multithreaded--并发系列题目--Java 解法--AtomicInteger/CountDownLatch/CyclicBarrier

    题目地址:Fizz Buzz Multithreaded - LeetCode Write a program that outputs the string representation of nu ...

  2. LeetCode1117. Building H2O --Java解法--多线程保证执行顺序--AtomicInteger

    此文首发于我的个人博客:LeetCode 1117. Building H2O --Java解法–多线程保证执行顺序–AtomicInteger - zhang0peter的个人博客 LeetCode ...

  3. Java CAS AtomicInteger使用

    有问题的: import java.util.concurrent.CountDownLatch;public class AtomicIntegerTest {public int count;pu ...

  4. AtomicInteger源码注释

    AtomicInteger源码 在java.util.concurrent.atomic包下提供了大量的原子类,这里以AtomicInteger源码为例,添加了一些注释,个人理解,供参考: 其中比较重 ...

  5. AtomicInteger

    AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...

  6. AtomicInteger源码分析——基于CAS的乐观锁实现

    原文出处: bestStyle 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换, ...

  7. 原子操作类AtomicInteger详解

    为什么需要AtomicInteger原子操作类? 对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的.num++解析为num=num+1,明显,这个操作 ...

  8. 深入解析Java AtomicInteger 原子类型

    深入解析Java AtomicInteger原子类型 在进行并发编程的时候我们需要确保程序在被多个线程并发访问时可以得到正确的结果,也就是实现线程安全.线程安全的定义如下: 当多个线程访问某个类时,不 ...

  9. AtomicInteger原子性

    AtomicInteger 保证多线程,可见变量的原子性 package com.bjsxt.base.sync007;import java.util.concurrent.atomic.Atomi ...

  10. 死磕java并发cas_死磕 java并发包之AtomicInteger源码分析

    问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...

最新文章

  1. MS SQL数据库服务介绍
  2. altium designer 原理图和PCB 多通道设计
  3. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )
  4. 服务器带系统,服务器有带系统的吗
  5. windows远程连接报错--“发生身份验证错误。要求的函数不受支持”
  6. python中乘法和除法_python – NumPy的性能:uint8对比浮动和乘法与除法?
  7. Qt下Sqlite数据库操作
  8. 【物理/数学】—— 概念的理解 moment、momentum
  9. 通过示例休眠–第1部分(删除孤儿)
  10. java spring eventbus_spring集成guava的event bus
  11. cocos2dx迷你地图
  12. 1 阿里云Nginx配置https实现域名访问项目
  13. python seo 外链_百度链接提交-主动推送程序Python版
  14. [Qualcomm][Debug] 不用软件抓QXDM LOG
  15. Windows下使用C++(Win32SDK)编程无需提权读取硬盘序列号(XP、Win7和Win10都可用)
  16. Gossip 协议简介
  17. 工地实名制人脸识别门禁通道闸机如何安装?
  18. javaweb图片加载不出来问题的解决方法
  19. jmeter连接数据库查询获取多个参数, 并通过参数化传值,实现jmeter造数
  20. 文件字节大小显示成M,G和K

热门文章

  1. Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告
  2. Nike Hyperdunk 2012 Men's Basketball Shoes Black/Gorge Green
  3. 洛谷 P2765 魔术球问题 解题报告
  4. import threading线程进程
  5. BZOJ 1076: [SCOI2008]奖励关 [DP 期望 状压]
  6. iOS 使点击事件穿透透明的UIView
  7. 51nod 1013快速幂 + 费马小定理
  8. jQuery的操作css的几种方法和位置,尺寸以及scrolltop方法
  9. [jQuery基础] jQuery案例 -- 新浪微博
  10. react留言功能准备一