対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
Gold 保有者 監修1Z0-829 対応
並行処理(Atomic)難易度 標準無料

次のコードの出力として正しいものを選べ。

1  import java.util.concurrent.atomic.AtomicInteger;
2  public class Q5 {
3      public static void main(String[] args) {
4          AtomicInteger a = new AtomicInteger(0);
5          System.out.println(a.getAndIncrement());  // (1)
6          System.out.println(a.incrementAndGet());   // (2)
7          System.out.println(a.getAndAdd(5));         // (3)
8          System.out.println(a.get());                // (4)
9      }
10 }
  1. A0 / 2 / 2 / 7(上から順に)
  2. B1 / 2 / 7 / 7
  3. C0 / 1 / 2 / 7
  4. D1 / 1 / 7 / 7
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AGold監修

解説

AtomicIntegergetAndXxx 系は更新前の値を返し、xxxAndGet 系は更新後の値を返す。

  • (1) getAndIncrement():現在0を返し → 値は1。出力 0
  • (2) incrementAndGet():値を2にして → 2を返す。出力 2
  • (3) getAndAdd(5):現在2を返し → 値は7。出力 2
  • (4) get():現在値7。出力 7
各誤答が違う理由
  • B(1)を「更新後の1」と取り違えた誤り。getAndIncrement は更新前の0を返す。
  • C(2)を「更新前の1」と取り違えた誤り。incrementAndGet は更新後の2を返す。
  • Dget系/AndGet系の返す値(前/後)を全体的に取り違えた誤り。
ひっかけ: メソッド名の語順(get-And-Increment と increment-And-Get)で「返すのが前か後か」が決まる。
実機確認の答え合わせ
出力(単一スレッドなので決定的):
0
2
2
7
Gold 保有者による書き下ろし解説・実機で検証済
この分野をもっと解いて、得点源に
並行処理 を含む全問を分野別に演習できます(無料)。
演習する →