本文主要是介绍AtomicInteger类的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
AtomicInteger 类和 AtomicBoolean 类很相似,都是用于保证变量赋值操作的原子性的,它们在 jdk 1.5中就已经存在了.
简介
AtomicInteger类的适用于多线程下 int 类型变量的赋值场景, 可以保证操作过程的原子性,另外它不能完全替代 Integer 类的作用.
使用方式
1.定义 AtomicBoolean 变量,并设置初始值.
public static AtomicInteger race = new AtomicInteger(0);
2.调用 AtomicBoolean 类中的自增方法.
race.getAndIncrement();
说明:
- 代码中的 getAndIncrement() 方法的作用是使 race 变量自增 1,这个过程是原子性的.
使用场景
AtomicInteger类适用于多线程下, int 类型变量自增自减的场景.
代码示例
1.不使用 AtomicInteger 类,执行自增.
public class VolatileTest2 {public static int race = 0;public static void increase() {race++;}public static void main(String[] args) throws InterruptedException {Thread[] threads = new Thread[20];for (int i = 0; i < threads.length; i++) {threads[i] = new Thread(() -> {for (int j = 0; j < 1000; j++) {increase();}});threads[i].start();}// 这边等待的原因是等所有的线程执行完毕Thread.sleep(1000);System.out.println(race);}
}执行结果:
19874
2.使用 AtomicInteger 类执行自增.
import java.util.concurrent.atomic.AtomicInteger;public class VolatileTest2 {public static AtomicInteger race = new AtomicInteger(0);public static void increase() {race.getAndIncrement();}public static void main(String[] args) throws InterruptedException {Thread[] threads = new Thread[20];for (int i = 0; i < threads.length; i++) {threads[i] = new Thread(() -> {for (int j = 0; j < 1000; j++) {increase();}});threads[i].start();}// 这边等待的原因是等所有的线程执行完毕Thread.sleep(1000);System.out.println(race);}
}执行结果:
20000
3.AtomicInteger 类的替代方案,使用 synchronized 关键字给代码块加个锁.
public class VolatileTest2 {public static int race = 0;public static void increase() {synchronized(VolatileTest2.class) {race++;}}public static void main(String[] args) throws InterruptedException {Thread[] threads = new Thread[20];for (int i = 0; i < threads.length; i++) {threads[i] = new Thread(() -> {for (int j = 0; j < 1000; j++) {increase();}});threads[i].start();}// 这边等待的原因是等所有的线程执行完毕Thread.sleep(1000);System.out.println(race);}
}打印结果:
20000
总结
- 对于多线程下,需要保证 int 类型变量自增的准确性,可以使用 AtomicInteger 类,简单有效.
这篇关于AtomicInteger类的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!