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
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント