java并发JUC工具包AtomicInteger原子整型语法基础

Java并发JUC工具包提供了一些高效且线程安全的队列、锁和原子变量等工具类,其中AtomicInteger是实现原子性操作整型数据的类。

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。接着,我们创建了两个线程t1t2,它们共同工作以将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原子整型语法基础