面试专题:java多线程(3)---关于 Atomic 原子类
发布人:shili8
发布时间:2023-11-20 22:57
阅读次数:0
在Java多线程编程中,我们经常会遇到共享变量的并发访问问题。为了解决这个问题,Java提供了一些原子类,其中最常用的是AtomicInteger、AtomicLong和AtomicBoolean。这些原子类提供了一些原子操作,可以保证对共享变量的操作是原子性的,从而避免了线程安全问题。
下面是一个使用AtomicInteger的示例代码:
java import java.util.concurrent.atomic.AtomicInteger; public class AtomicExample { private static AtomicInteger counter = new AtomicInteger(0); public static void main(String[] args) { Thread t1 = new Thread(new IncrementTask()); Thread t2 = new Thread(new IncrementTask()); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Counter: + counter.get()); } static class IncrementTask implements Runnable { @Override public void run() { for (int i = 0; i < 1000; i++) { counter.incrementAndGet(); } } } }
在这个示例中,我们创建了一个AtomicInteger对象counter,并初始化为0。然后创建了两个线程t1和t2,它们都执行IncrementTask任务。IncrementTask任务中,我们使用了counter的incrementAndGet方法来对counter进行原子递增操作。
在主线程中,我们使用join方法等待t1和t2线程执行完毕,然后打印出counter的值。由于AtomicInteger的incrementAndGet方法是原子的,所以我们可以确保counter的值是正确的。
除了incrementAndGet方法,AtomicInteger还提供了其他一些常用的原子操作方法,比如getAndIncrement、decrementAndGet、getAndSet等等。这些方法都是线程安全的,可以在多线程环境下使用。
除了AtomicInteger,Java还提供了其他一些原子类,比如AtomicLong和AtomicBoolean。它们的使用方式和AtomicInteger类似,都提供了一些原子操作方法,可以保证对共享变量的操作是原子性的。
总结一下,Atomic原子类是Java多线程编程中非常有用的工具,可以保证对共享变量的操作是原子性的,从而避免了线程安全问题。在实际开发中,我们可以根据需要选择合适的原子类来解决并发访问共享变量的问题。