マルチコア プロセッサの普及に伴い、コンピュータ アプリケーションでの同時プログラミングはますます重要なスキルになってきています。 Java の ConcurrentHashMap は、スレッドの安全性を確保しながら同時アクセスのニーズを満たすことができる効率的な同時マッピング テーブル データ構造です。この記事では、Java で ConcurrentHashMap 関数を使用して同時マッピング操作を実行する方法を紹介します。
ConcurrentHashMap は、Java 5 で導入されたスレッドセーフなハッシュ テーブル実装です。 Hashtable や SynchronizedMap と比較して、同時実行パフォーマンスが優れています。 Hashtable や SynchronizedMap と同様、ConcurrentHashMap もキーと値のペアのマッピング テーブルですが、ロックの競合を減らすためにセグメント化されたロック テクノロジを使用しています。
Java で ConcurrentHashMap を使用するのは簡単です。まず、java.util.concurrent.ConcurrentHashMap パッケージをインポートし、次に ConcurrentHashMap オブジェクトを作成する必要があります。
import java.util.concurrent.ConcurrentHashMap; ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
上記のコードでは、キーと値のペアを格納するための ConcurrentHashMap オブジェクトを作成しました。ここで、キーのタイプは String で、値のタイプは Integer です。
一般的に使用される ConcurrentHashMap 関数
ConcurrentHashMap で一般的に使用される関数とその使用方法を以下に示します。
put()
指定されたキーと値のペアを ConcurrentHashMap に追加します。指定したキーがすでに存在する場合、対応する値が更新され、古い値が返されます。指定されたキーが存在しない場合は、新しいキーと値のペアが追加され、null が返されます。
Integer oldValue = map.put("a", 1); // 添加键值对a=1,返回null Integer value = map.put("b", 2); // 添加键值对b=2,返回null Integer newValue = map.put("a", 3); // 更新键值对a=3,返回旧值1
get()
指定されたキーに対応する値を取得します。キーが存在しない場合は null を返します。
Integer value = map.get("a"); // 获取键a对应的值3
remove()
指定されたキーと値のペアを削除します。キーが存在しない場合は null を返します。
Integer value = map.remove("a"); // 删除键a对应的键值对,返回值3
replace()
指定されたキーに対応する値を置換します。キーが存在しない場合は null を返します。
Integer oldValue = map.replace("b", 4); // 替换键b对应的值为4,返回旧值2
putIfAbsent()
指定されたキーが存在しない場合は、新しいキーと値のペアを追加し、null を返します。指定したキーがすでに存在する場合は、対応する値が返されます。
Integer oldValue = map.putIfAbsent("a", 5); // putIfAbsent会判断键a是否存在,因为键a已经存在于ConcurrentHashMap中,此次添加操作不会执行,返回a对应的旧值3 Integer value = map.putIfAbsent("c", 6); // putIfAbsent会判断键c是否存在,因为键c不存在于ConcurrentHashMap中,此次添加键值对c=6操作会执行,返回null
size()
ConcurrentHashMap 内のキーと値のペアの数を取得します。
int size = map.size(); // 获取ConcurrentHashMap中键值对的数量
clear()
ConcurrentHashMap 内のすべてのキーと値のペアを削除します。
map.clear(); // 删除ConcurrentHashMap中的所有键值对
サンプル コード
次は、同時マッピング操作に ConcurrentHashMap 関数を使用する方法を示す簡単な例です。この例では、複数のスレッドを開始してキーと値のペアを ConcurrentHashMap に追加し、キーと値のペアに同時にアクセスします。
import java.util.concurrent.ConcurrentHashMap; public class ConcurrentHashMapDemo { public static void main(String[] args) throws InterruptedException { ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>(); // 添加键值对的线程 Thread addThread = new Thread(() -> { for (int i = 0; i < 100; i++) { map.put(String.valueOf(i), i); } }); // 访问键值对的线程 Thread visitThread = new Thread(() -> { for (int i = 0; i < 100; i++) { Integer value = map.get(String.valueOf(i)); System.out.println(Thread.currentThread().getName() + " " + value); } }); addThread.start(); visitThread.start(); addThread.join(); visitThread.join(); } }
この例では、2 つのスレッドを開始します。1 つのスレッドはキーと値のペアを ConcurrentHashMap に追加するために使用され、もう 1 つのスレッドはキーと値のペアにアクセスするために使用されます。アクセス スレッドでは、ConcurrentHashMap の get() 関数を使用して、キーと値のペアの値を取得します。
出力結果は以下のとおりです。
Thread-1 0 Thread-1 1 Thread-1 2 Thread-1 3 Thread-1 4 . . . Thread-1 97 Thread-1 98 Thread-1 99
追加スレッドとアクセススレッドが同時に動作しており、スレッド間の競合が発生していないことがわかります。 ConcurrentHashMap は、スレッドの安全性と高い同時実行パフォーマンスを保証します。
概要
この記事では、Java での同時マッピング操作に ConcurrentHashMap 関数を使用する方法を紹介します。 ConcurrentHashMap を使用すると、プログラムの同時実行パフォーマンスを向上させ、マルチスレッド シナリオでのスレッドの安全性を確保できます。同時実行性の高いネットワーク アプリケーションを開発している場合でも、大規模なデータを処理する分散システムを開発している場合でも、ConcurrentHashMap は非常に実用的なツールです。
以上がJava での同時マッピング操作に ConcurrentHashMap 関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。