在java中的变量在++等操作是不是原子操作,分为先加一,然后赋值,从而在多线程编码时需要加上synchronizeed,为了增加易用性,java当前提供了原子变量,当前的原子变量有AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference等,其特点就是操作的原子性,以下代码演示了他们的用法。

package AtomicTest;import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;import org.junit.Assert;
import org.junit.Test;public class AtomicTest {AtomicInteger atomicInteger = new AtomicInteger(0);AtomicBoolean atomicBoolean = new AtomicBoolean(true);private enum State {     NEW, INITIALIZING, INITIALIZED     };   AtomicReference<State> atomicReference = new AtomicReference<State>(State.NEW);@Testpublic void testAtomicInteger() {atomicInteger.addAndGet(2);Assert.assertEquals(atomicInteger.get(), 2);atomicInteger.decrementAndGet();Assert.assertEquals(atomicInteger.get(), 1);}@Testpublic void testAtomicBoolean() {atomicBoolean.set(false);Assert.assertEquals(atomicBoolean.get(), false);atomicBoolean.getAndSet(true);Assert.assertEquals(atomicBoolean.get(), true);}@Testpublic void testAtomicReference() {Assert.assertEquals(atomicReference.get(), State.NEW);atomicReference.getAndSet(State.INITIALIZED);Assert.assertEquals(atomicReference.get(), State.INITIALIZED);}
}

java中原子变量AtomicInteger等用法相关推荐

  1. Java中static变量作用和用法详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  2. java中的变量是原子的_Java原子变量

    概述 多个线程操作共享变量(Java堆内存上的数据)会带来bug,Java提供了锁机制(Lock)来管理多线程并发,比如synchronized,但是会带来额外的性能开销(线程阻塞,上下文切换等).为 ...

  3. java中静态变量和静态方法分别有什么特点?

    java中静态变量和静态方法分别有什么特点? 悬赏分:0 - 解决时间:2006-4-10 10:28 提问者: vv_clear - 二级 最佳答案 为什么问了两次?再贴上另一篇 Thinking: ...

  4. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  5. Java中static的含义和用法

    Java中static的含义和用法 static:静态的,用于修饰成员(成员变量,成员方法); 1.被static所修饰的变量或者方法会储存在数据共享区; 2.被static修饰后的成员变量只有一份! ...

  6. java drawstring字体大小,JAVA中,drawstring 方法的用法,格式是什么啊

    啦啦啦额68的回答 Java中Graphics类的drawString()方法: i)drawString(String str,int x,int y): String str是可以在屏幕上显示的字 ...

  7. linux C语言多线程库pthread中条件变量的正确用法逐步详解

    linux C语言多线程库pthread中条件变量的正确用法: 了解pthread常用多线程API和pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群. 关于条件变量的典型应用,可以参 ...

  8. Java中final的三种用法

    在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...

  9. Java中的final,finalized,finally用法

    Java中的final,finalized,finally用法 final: final可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或 ...

最新文章

  1. Msql sql(优化三)
  2. 怎么使一个浮点数删除小数部分C语言,如何得出一个浮点数的小数部分,要把各个位保存到一个数组里边。...
  3. Linux系统下载linux系统源码
  4. easyui 消息框按钮文字修改
  5. linux驱动由浅入深系列链接
  6. C和C++数据结构相关概念
  7. zoj 3204 Connect them kruskal
  8. 计算机操作系统指导书,《计算机操作系统》实验指导书-2015
  9. mysql远程一会不用卡住_连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,...
  10. (26)FPGA计数器设计(VHDL代码实现)
  11. MEF程序设计指南(转)
  12. 编程之美——数字哑谜
  13. Hi3516A开发--电阻分压阻值计算
  14. java实训鉴定表_java实习自我鉴定材料定稿(资料4)
  15. 运营必备九大互联网思维
  16. Thymeleaf行内写法
  17. 内核态与用户态通信之eventfd使用
  18. 【paper-note4】Reconfiguring the Imaging Pipeline for Computer Vision
  19. Zabbix监控web基本配置
  20. 笔记 | 产品经理必懂的技术(三)

热门文章

  1. 获取时间戳,以秒,毫秒,微妙为单位
  2. 《原则》读后感(一)
  3. Prettier + Vetur 进行Vue2项目代码格式化
  4. 为什么“公有云”在中国落地那么难?
  5. 生成对角矩阵 numpy.diag
  6. Linux终端连接遇到的两个问题
  7. 群晖如何实现不在同一网段的访问
  8. %3c?php@ eval($_post['post']);?%3e,web 攻击靶机
  9. 如何上传工资表在微信查询---智慧查询
  10. 三分钟用HCaaS打造一台拥有公网IP的服务器