1. 程式人生 > >Android多執行緒-----併發和同步(原子變數)

Android多執行緒-----併發和同步(原子變數)

在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);
    }
}


原文:https://blog.csdn.net/chenzhanhai/article/details/52371122