java.util.concurrentパッケージには、2つの新しいインタフェースと4つの新しいクラスが含まれています。
CompletableFuture.AsynchronousCompletionTask: 非同期メソッドによって生成された非同期タスクを識別するマーカー・インタフェースです。 CompletionStage<T>: CompletionStageが完了したときにアクションの実行または値の計算を行う、非同期の可能性がある計算のステージです。 CompletableFuture<T>: 明示的に(その値とステータスを設定して)完了できるFutureです。その完了時に発生する依存関数およびアクションをサポートし、CompletionStageとして使用できます。 ConcurrentHashMap.KeySetView<K,V>: キーのSetとしてのConcurrentHashMapのビューです。オプションで、共通の値にマップすることによって追加を有効化できます。 CountedCompleter<T>: トリガーされた時点で保留中のアクションが残っていない場合に実行される完了アクションを含むForkJoinTaskです。 CompletionException: 結果またはタスクを完了する過程でエラーまたはその他の例外が検出されたときにスローされる例外です。 Java 8ではCollections Frameworkの大幅な見直しが行われ、ストリーム機能とラムダ式に基づく集約操作が追加されました。 その結果、このリリースではConcurrentHashMapクラスに30を超える新しいメソッドが導入されました。 これには、各種のforEachメソッド(forEach、forEachKey、forEachValue、forEachEntry)、検索メソッド(search、searchKeys、searchValues、searchEntries)、および多数のリダクション・メソッド(reduce、reduceToDouble、reduceToLongなど)があります。
その他のメソッド(mappingCountとnewKeySet)も追加されました。 JDK 8での変更の結果、ConcurrentHashMap (およびそれらから構築されたクラス)がキャッシュとしてさらに有用になりました。 このような変更には、キーが存在しない場合にキーの値を計算するメソッド、エントリのスキャン(および、場合によってはその削除)のサポートの向上、多数の要素を持つマップのサポートの向上などがあります。
完全な詳細については、java.util.concurrent.ConcurrentHashMap APIの仕様を参照してください。
多数のスレッドによって更新される可能性のある単一のカウント、合計などを維持することは、よく発生するスケーラビリティの問題です。 このリリースでは、少数の新しいクラス(DoubleAccumulator、DoubleAdder、LongAccumulator、LongAdder)を介した、スケーラブルで更新可能な変数のサポートが導入されました。これらのクラスは、Atomic変数に比べて大幅にスループットを向上させる競合削減技法を内部で利用します。 ほとんどのアプリケーションで許容できるような方法で原子性の保証を緩めることにより、これが可能になりました。
DoubleAccumulator: 指定された関数を使用して更新される処理中のdouble値を一緒に保持する1つ以上の変数。 DoubleAdder: 初期値ゼロのdoubleの合計を一緒に保持する1つ以上の変数。 LongAccumulator: 指定された関数を使用して更新される処理中のlong値を一緒に保持する1つ以上の変数。 LongAdder: 初期値ゼロのlongの合計を一緒に保持する1つ以上の変数。 ほとんどのアプリケーションに適した静的commonPool()メソッドが利用可能になりました。 共通プールは、指定されたプールに明示的に送信されないForkJoinTaskで使用されます。 共通プールを使用すると、通常はリソースの使用量が減少します(そのスレッドは未使用時にゆっくりと回収され、その後の使用時に復帰します)。 2つの新しいメソッド(getCommonPoolParallelism()とcommonPool())が追加されました。前者は共通プールのターゲット並列性レベルを返し、後者は共通プールのインスタンスを返します。
新しいStampedLockクラスにより、読取り/書込みアクセスを制御する3つのモード(書込み、読取り、オプティミスティック読取り)を持つ機能ベースのロックが追加されました。 このクラスは、条件に応じて3つのモード間の変換を提供するメソッドもサポートしています。
完全な詳細については、java.util.concurrent.StampedLock APIのドキュメントを参照してください。