AtomicInteger类的概念
AtomicInteger是Java中的一个原子操作类,它提供了一种在多线程环境下对整数进行原子操作的方式。AtomicInteger内部使用了CAS(Compare - And - Swap)算法来实现原子操作,保证了操作的原子性和可见性。
AtomicInteger提供的原子操作方法
get()和set(int newValue)get()方法用于获取AtomicInteger对象的当前值。set(int newValue)方法用于设置AtomicInteger对象的新值。
incrementAndGet()和decrementAndGet()incrementAndGet()方法用于对AtomicInteger对象的值进行自增1操作,并返回自增后的值。decrementAndGet()方法用于对AtomicInteger对象的值进行自减1操作,并返回自减后的值。
addAndGet(int delta)和getAndAdd(int delta)addAndGet(int delta)方法用于对AtomicInteger对象的值加上一个指定的增量(delta),并返回加上增量后的值。getAndAdd(int delta)方法用于获取AtomicInteger对象的当前值,然后对该值加上一个指定的增量(delta),并返回加上增量前的值。
compareAndSet(int expect, int update)compareAndSet(int expect, int update)方法用于比较AtomicInteger对象的当前值与期望值(expect),如果相等,则将值更新为指定的新值(update),并返回操作是否成功;如果不相等,则不进行任何操作,并返回操作失败。
使用AtomicInteger实现线程安全的计数器
以下是一个使用AtomicInteger实现线程安全计数器的示例代码:
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicCounter {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
public static void main(String[] args) {
AtomicCounter counter = new AtomicCounter();
Runnable task = () -> {
for (int i = 0; i < 1000; i++) {
counter.increment();
}
};
Thread thread1 = new Thread(task);
Thread thread2 = new Thread(task);
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final count: " + counter.getCount());
}
}
在这个示例中,我们创建了一个AtomicCounter类,它使用AtomicInteger来存储计数器的值。increment()方法使用incrementAndGet()方法对计数器进行自增操作,这个操作是原子性的,因此可以保证在多线程环境下计数器的正确性。在main方法中,我们创建了两个线程来并发地对计数器进行自增操作,最后通过join()方法等待两个线程执行完毕,并输出最终的计数值。
总结
AtomicInteger类提供了一系列原子操作方法,可以方便地在多线程环境下实现线程安全的整数操作。通过使用AtomicInteger类提供的原子操作方法,可以避免使用锁带来的性能开销,并且可以保证操作的原子性和可见性。

2160

被折叠的 条评论
为什么被折叠?



