Java SE 8での並行処理ユーティリティの拡張機能

java.util.concurrentの新しいクラスとインタフェース

java.util.concurrentパッケージには、2つの新しいインタフェースと4つの新しいクラスが含まれています。

java.util.concurrent.ConcurrentHashMapの新しいメソッド

Java 8ではCollections Frameworkの大幅な見直しが行われ、ストリーム機能ラムダ式に基づく集約操作が追加されました。その結果、このリリースではConcurrentHashMapクラスに30を超える新しいメソッドが導入されました。これには、各種のforEachメソッド(forEachforEachKeyforEachValueforEachEntry)、検索メソッド(searchsearchKeyssearchValuessearchEntries)、および多数のリダクション・メソッド(reducereduceToDoublereduceToLongなど)があります。

その他のメソッド(mappingCountnewKeySet)も追加されました。JDK 8での変更の結果、ConcurrentHashMap (およびそれらから構築されたクラス)がキャッシュとしてさらに有用になりました。このような変更には、キーが存在しない場合にキーの値を計算するメソッド、エントリのスキャン(および、場合によってはその削除)のサポートの向上、多数の要素を持つマップのサポートの向上などがあります。

完全な詳細については、java.util.concurrent.ConcurrentHashMap APIの仕様を参照してください。

java.util.concurrent.atomicの新しいクラス

多数のスレッドによって更新される可能性のある単一のカウント、合計などを維持することは、よく発生するスケーラビリティの問題です。このリリースでは、少数の新しいクラス(DoubleAccumulatorDoubleAdderLongAccumulatorLongAdder)を介した、スケーラブルで更新可能な変数のサポートが導入されました。これらのクラスは、Atomic変数に比べて大幅にスループットを向上させる競合削減技法を内部で利用します。ほとんどのアプリケーションで許容できるような方法で原子性の保証を緩めることにより、これが可能になりました。

java.util.concurrent.ForkJoinPoolの新しいメソッド

ほとんどのアプリケーションに適した静的commonPool()メソッドが利用可能になりました。共通プールは、指定されたプールに明示的に送信されないForkJoinTaskで使用されます。共通プールを使用すると、通常はリソースの使用量が減少します(そのスレッドは未使用時にゆっくりと回収され、その後の使用時に復帰します)。2つの新しいメソッド(getCommonPoolParallelism()commonPool())が追加されました。前者は共通プールのターゲット並列性レベルを返し、後者は共通プールのインスタンスを返します。

新しいクラスjava.util.concurrent.locks.StampedLock

新しいStampedLockクラスにより、読取り/書込みアクセスを制御する3つのモード(書込み、読取り、オプティミスティック読取り)を持つ機能ベースのロックが追加されました。このクラスは、条件に応じて3つのモード間の変換を提供するメソッドもサポートしています。

完全な詳細については、java.util.concurrent.StampedLock APIのドキュメントを参照してください。


Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.