📌  相关文章
📜  Java中的 AtomicLong incrementAndGet() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:16:20.336000             🧑  作者: Mango

Java中的 AtomicLong incrementAndGet() 方法及示例

在多线程编程中,由于多线程之间访问共享资源的并发性,可能会导致一些问题,如数据竞争和线程安全性问题等。 Java提供了一些原子类,如AtomicInteger, AtomicLong, AtomicBoolean, 等,通过这些类可以实现线程安全的操作,从而避免这些问题。

AtomicLong是一个原子类,它提供了一些原子操作,如 getAndIncrement(),getAndDecrement(),incrementAndGet()等。

其中, incrementAndGet() 方法会将值加上1,然后返回加1之后的值,这个操作是原子性的,即该操作是线程安全的。

下面是incrementAndGet()方法的定义:

public final long incrementAndGet()

接下来,我们通过一个示例来更好地了解incrementAndGet()方法。

import java.util.concurrent.atomic.AtomicLong;

class Counter {
   private AtomicLong counter = new AtomicLong(0);
   public long increment() {
      return counter.incrementAndGet();
   }
}

public class Main {
   public static void main(final String[] arguments) {
      final Counter counter = new Counter();
      for(int i=1;i<=10;i++){
         new Thread(){
            public void run(){
               long incrementedValue = counter.increment();
               System.out.println("incremented value:"+incrementedValue);
            }
         }.start();
      }
   }
}

上述示例中,定义了一个 Counter 类,其中 counter 属性是AtomicLong类型的。在 increment() 方法中,incrementAndGet()方法被调用,来递增counter属性的值。最后,在main()函数中,创建了10个线程,并调用 Counter 类的increment()方法,并打印出increment()方法返回的值。

运行上述程序,你会看到如下输出:

incremented value:1
incremented value:2
incremented value:3
incremented value:4
incremented value:5
incremented value:6
incremented value:7
incremented value:8
incremented value:9
incremented value:10

由于AtomicLong的incrementAndGet()方法是原子性操作,因此在多线程环境下,我们无需担心数据竞争和线程安全的问题。

总结

在Java中,原子操作atomic操作是一种确保线程安全的技术。通过使用atomic操作,可以减少数据竞争和线程安全性问题的发生。使用AtomicLong的incrementAndGet()方法可以实现对计数器等资源的安全递增。