0Pricing
Java Academy · レッスン

Atomicと並行コレクション

スレッドセーフな処理のために、Atomic変数と並行コレクションを使う方法を学びます。

「Atomicと並行コレクション」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。

導入

Atomic変数と並行コレクションを使うと、スレッドセーフなプログラミングが簡単になります。

AtomicInteger

AtomicIntegerは、アトミックなインクリメント、デクリメント、compare-and-set操作を提供します。

コード:AtomicInteger

AtomicIntegerを使うと、明示的なロックなしで更新をスレッドセーフにできます。

import java.util.concurrent.atomic.*;public class Main {
  public static void main(String[] args) throws Exception {
    AtomicInteger count = new AtomicInteger(0);
    Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) count.incrementAndGet(); });
    Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) count.incrementAndGet(); });
    t1.start(); t2.start();
    t1.join(); t2.join();
    System.out.println("Count = " + count.get());
  }
}

並行コレクション

並行コレクションであるConcurrentHashMapやCopyOnWriteArrayListは、並行アクセスを安全に処理します。

コード:ConcurrentHashMap

ConcurrentHashMapを使うと、書き込みと読み取りを安全に並行して行えます。

import java.util.concurrent.*;public class Main {
  public static void main(String[] args) throws Exception {
    ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
    Thread t1 = new Thread(() -> { map.put("A", 1); });
    Thread t2 = new Thread(() -> { map.put("B", 2); });
    t1.start(); t2.start();
    t1.join(); t2.join();
    System.out.println(map);
  }
}

コード:CopyOnWriteArrayList

CopyOnWriteArrayListを使うと、反復処理中のConcurrentModificationExceptionを回避できます。

import java.util.concurrent.*;public class Main {
  public static void main(String[] args) {
    CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
    list.add("Hello");
    list.add("World");
    for(String s : list) {
      list.add("Extra"); // safe even during iteration
      System.out.println(s);
    }
  }
}

Atomic/Concurrentの確認

クイックチェック:複数のスレッドで通常のintを使う代わりに、AtomicIntegerを使うのはなぜですか。

まとめ

まとめ:スレッドセーフなカウンターにはアトミッククラスを使い、安全な共有データ構造には並行コレクションを使います。

よくある質問

「Atomicと並行コレクション」レッスンは無料ですか?

はい。「Atomicと並行コレクション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。

「Atomicと並行コレクション」で何を学びますか?

スレッドセーフな処理のために、Atomic変数と並行コレクションを使う方法を学びます。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「Atomicと並行コレクション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 同期とロック
  2. Atomicと並行コレクション
  3. よくある並行処理のバグ
← Java Academyに戻る