Java并发JUC工具包提供了一些高效且线程安全的队列、锁和原子变量等工具类,其中AtomicInteger
是实现原子性操作整型数据的类。
AtomicInteger类
AtomicInteger
类是java.util.concurrent
包中的一个类,它提供了一种原子性的更新机制,即多线程环境下对共享的整型变量进行原子性操作,避免了线程安全问题。常用的原子操作方法有getAndAdd()
、getAndIncrement()
、getAndDecrement()
、compareAndSet()
等,它们都是线程安全的方法,并且具有原子性。
AtomicInteger类的常用方法
public int get()
:获取当前的值public int getAndSet(int newValue)
:获取原来的值并设置新值public int getAndIncrement()
:获取原来的值并自增public int getAndAdd(int delta)
:获取原来的值并加上指定的值public boolean compareAndSet(int expect, int update)
:比较并设置新值
示例说明
示例一:多线程自增
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerDemo {
private static AtomicInteger count = new AtomicInteger(0);
public static void main(String[] args) throws InterruptedException {
Runnable runnable = () -> {
for (int i = 0; i < 10000; i++) {
count.incrementAndGet();
}
};
Thread t1 = new Thread(runnable);
Thread t2 = new Thread(runnable);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("count=" + count.get());
}
}
在这个示例中,我们使用了AtomicInteger
类实现多线程高效自增。
首先,我们创建了一个AtomicInteger
类型的静态变量count
,并且初始化为0。接着,我们创建了两个线程t1
和t2
,它们共同工作以将count
自增10000次。运行结果表明,即使存在多个线程共同访问count
变量,由于对它进行自增操作时使用的是原子性方法,因此不会有线程安全问题。
示例二:比较并且设置
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerDemo {
public static void main(String[] args) throws InterruptedException {
AtomicInteger atomicInteger = new AtomicInteger(1);
System.out.println("当前值:" + atomicInteger.get());
boolean result1 = atomicInteger.compareAndSet(1, 2);
boolean result2 = atomicInteger.compareAndSet(1, 3);
System.out.println("操作结果1:" + result1);
System.out.println("操作结果2:" + result2);
System.out.println("操作后的值:" + atomicInteger.get());
}
}
在这个示例中,我们通过compareAndSet()
方法来比较并更新AtomicInteger
实例。
首先,我们创建一个初始值为1的AtomicInteger
实例。接着,我们调用了compareAndSet()
方法,并传递了两个参数:期望值和新值。由于当前AtomicInteger
的值为1,所以第一个调用会成功,第二个调用会返回false。
通过了解compareAndSet()
方法,我们可以发现它实际上执行了两个步骤:首先比较当前的值是否等于期望值,如果相等,则使用新值替换当前值;否则,不进行任何操作,直接返回false。
最后,我们输出更新后的值,即2。该示例说明AtomicInteger
类提供的compareAndSet()
方法具有原子性,能够在多线程环境中执行可靠的操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java并发JUC工具包AtomicInteger原子整型语法基础 - Python技术站