AtomicInteger类

来源:互联网 发布:mysql锁表 解锁 编辑:程序博客网 时间:2024/06/06 00:15

今天写代码,尝试使用了AtomicInteger这个类,感觉使用起来很爽,特别适用于高并发访问,能保证i++,++id等系列操作的原子性。++i和i++操作并不是线程安全的,很多人会用到synchronized关键字。相对与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();
}
}


1 0
原创粉丝点击