AtomicInteger类

今天写代码。尝试使用了AtomicInteger这个类,感觉使用起来非常爽,特别适用于高并发訪问。能保证i++,++id等系列操作的原子性。

++i和i++操作并非线程安全的。非常多人会用到synchronizedkeyword。相对与AtomicInteger这个类而言。

AtomicInteger能够用原子方式更新的 int 值。

AtomicInteger对int型加减操作的线程安全,性能上远远优越于synchronized。

这是AtomicInteger源代码中提供的所有接口方法。

构造方法摘要

AtomicInteger() 
           创建具有初始值 0 的新 AtomicInteger。 
AtomicInteger(int initialValue) 
           创建具有给定初始值的新 AtomicInteger。 

方法摘要

 int addAndGet(int delta) 
           以原子方式将给定值与当前值相加。 
 boolean compareAndSet(int expect, int update) 
           假设当前值 == 预期值。则以原子方式将该值设置为给定的更新值。 
 int decrementAndGet() 
           以原子方式将当前值减 1。 
 double doubleValue() 
           以 double 形式返回指定的数值。

 
 float floatValue() 
           以 float 形式返回指定的数值。 
 int get() 
           获取当前值。 
 int getAndAdd(int delta) 
           以原子方式将给定值与当前值相加。

 
 int getAndDecrement() 
           以原子方式将当前值减 1。

 
 int getAndIncrement() 
           以原子方式将当前值加 1。 
 int getAndSet(int newValue) 
           以原子方式设置为给定值,并返回旧值。 
 int incrementAndGet() 
           以原子方式将当前值加 1。 
 int intValue() 
           以 int 形式返回指定的数值。 
 void lazySet(int newValue) 
           最后设置为给定值。

 
 long longValue() 
           以 long 形式返回指定的数值。 
 void set(int newValue) 
           设置为给定值。 
 String toString() 
           返回当前值的字符串表示形式。

 
 boolean weakCompareAndSet(int expect, int update) 
           假设当前值 == 预期值,则以原子方式将该设置为给定的更新值。 

以下贴一个简单的样例:

class Counter {
private volatile int count = 0;

public synchronized void increment() {
count++;  //若要线程安全运行运行count++,须要加锁
}

public int getCount() {
return count;
}
}

class Counter {
private AtomicInteger count = new AtomicInteger(); 

public void increment() {
count.incrementAndGet();
}
 //使用AtomicInteger之后,不须要加锁。也能够实现线程安全。

public int getCount() {
return count.get();
}
}


原文地址:https://www.cnblogs.com/gccbuaa/p/6962842.html