JavaのAtomicIntegerの使い方

JavaのAtomicIntegerの使い方

java.util.concurrent.atomic.AtomicIntegerクラスがあります。

処理を同期させたい場合に使用するクラスです。

例えばstream().forEach内でインクリメントすることができたりします。

import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;

public class Atomic {
  public static void main(String[] args) {
    Stream<String> stream = Stream.of("aiu", "eo", "eeee", "eeaa", "ai", "aiu", "a", "aio"); // 文字列長でグルーピングする
    AtomicInteger i = new AtomicInteger();
    stream.forEach(e -> {
      System.out.println(i.getAndIncrement());
    });
  }
}

デフォルトコンストラクタに初期値を設定しますが省略した場合は0となります。

getAndIncrement()メソッドで値を取得してからインクリメントします。結果は以下のようになります。

0
1
2
3
4
5
6
7

デフォルトコンストラクタにint型で値をしていすると、その値のクラスになります。

int型を取得したい場合はget()メソッドを使用します。

import java.util.concurrent.atomic.AtomicInteger;

public class Atomic002 {
  public static void main(String[] args) {
    AtomicInteger i = new AtomicInteger(1);
    System.out.println(i);
    System.out.println(i.get());
    // System.out.println(i + 2); // iはクラスなのでエラーとなる
    System.out.println(i.get() + 2); // i.get()はint型なので足し算が出来る
  }
}

その他AtomicBooleanやAtomicLongなどもありますが基本的にこれらのクラスは同期したい場合に使用するクラス群です。結果は以下のようになります。

1
1
3

コメント

タイトルとURLをコピーしました