java中原子变量AtomicInteger等用法

原创 2016年08月30日 17:09:44

       在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);
    
    @Test
    public void testAtomicInteger() {
        
        atomicInteger.addAndGet(2);
        Assert.assertEquals(atomicInteger.get(), 2);
        
        atomicInteger.decrementAndGet();
        Assert.assertEquals(atomicInteger.get(), 1);
    }
    
    @Test
    public void testAtomicBoolean() {
        
        atomicBoolean.set(false);
        Assert.assertEquals(atomicBoolean.get(), false);
        
        atomicBoolean.getAndSet(true);
        Assert.assertEquals(atomicBoolean.get(), true);
    }
    
    @Test
    public void testAtomicReference() {
        
        Assert.assertEquals(atomicReference.get(), State.NEW);
        
        atomicReference.getAndSet(State.INITIALIZED);
        Assert.assertEquals(atomicReference.get(), State.INITIALIZED);
    }
}


java中的原子操作类AtomicInteger及其实现原理

/**          * 一,AtomicInteger 是如何实现原子操作的呢?          *          * 我们先来看一下getAndIncrement的源代码:      ...

Java原子操作AtomicInteger的用法

原文:http://www.jianshu.com/p/509aca840f6d 前言: JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理...

java并发中的原子变量和原子操作以及CAS介绍

起源于一道面试题i++是不是原子操作?什么事原子操作?于是乎搜集答案:       很多情况下我们只是需要一个简单的、高效的、线程安全的递增递减方案。注意,这里有三个条件:简单,意味着程序员尽可能...

Java原子变量类

以下是对《java并发编程实战》一书中相关部分的总结,加深自己的印象。     原子变量比锁的粒度更细,量级更轻,并且对于在多处理器系统上实现高性能的并发代码来说是非常关键的。原子变量将发生竞争的范围...

原子变量(AtomicLong, AtomicInteger, AtomicReference)

J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作...

多线程2:Java原子变量(java.util.concurrent.atomic.*)

一个没有并发控制的计数器(典型的竞态条件): package com.test1; public class Counter { public int num = 0; } package com...

java原子变量

变量的赋值代码体现为一条语句,但是对应的虚拟机编译后的字节码就可能是多条语句。因此,在多线程环境下,单个变量的赋值可能会出现意想不到的问题。 java5后增加了“原子变量”的概念,目前支持的“原子变...

AtomicInteger类的理解与使用

AtomicInteger类的理解与使用首先看两段代码,一段是Integer的,一段是AtomicInteger的....

AtomicInteger的用法

J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)...
  • xiahao86
  • xiahao86
  • 2013年05月15日 11:12
  • 16910

Java并发编程规则:原子变量实现线程安全

判定规则: 如果一个类中存在变量,并且此变量的操作不是原子操作,那么这个类就是非线程安全的类。在线程产生竞争条件的情况下,多线程访问导致原子性不可保证。 常见原子变量: 在java.util.conc...
  • boonya
  • boonya
  • 2016年12月07日 18:10
  • 750
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中原子变量AtomicInteger等用法
举报原因:
原因补充:

(最多只允许输入30个字)