K
- キーの型V
- 値の型public class CopyOnReadMap<K,V> extends MapWrapper<K,V>
リクエストスレッドがセッション上の変数にアクセスした時点で、 セッションのスナップショット(ディープコピー)をスレッドローカル変数上に作成する。 以降、当該リクエストスレッドからのアクセスはこのスナップショットに対して行われる。 リクエスト終了時にスナップショット上の変更をもとのセッションにマージするが、 この際、他のリクエストスレッドによってセッションが既に書き換えられていた場合はConcurrentModificationException
を送出する。 また、セッションの直列化に失敗した場合はCopyOnReadMap.SnapshotCreationError
を送出する。
修飾子とタイプ | クラスと説明 |
---|---|
static class |
CopyOnReadMap.SnapshotCreationError
マップ内にserialize不可能なオブジェクトが存在するなどの理由により、
スナップショットの作成に失敗したことを表す実行じ例外。
|
コンストラクタと説明 |
---|
CopyOnReadMap()
デフォルトコンストラクタ
このコンストラクタの処理は以下のソースコードと等価である。
|
CopyOnReadMap(java.util.Map<K,V> baseMap)
指定されたMapオブジェクトに対する並行アクセスラッパーを作成する。
|
修飾子とタイプ | メソッドと説明 |
---|---|
CopyOnReadMap<K,V> |
deactivate()
同期処理を停止する。
|
java.util.Map<K,V> |
getDelegateMap()
このラッパーが処理を委譲する
Map オブジェクトを返す。 |
void |
refresh()
現在のスナップショットを破棄する。
|
CopyOnReadMap<K,V> |
save()
カレントスレッドが保持しているスナップショットを実体のマップに反映する。
|
CopyOnReadMap<K,V> |
setIgnoredEntries(K... entryNames)
同期処理の対象外とするエントリを追加する。
|
clear, containsKey, containsValue, entrySet, equals, get, getDelegateMapOfType, hashCode, isEmpty, keySet, put, putAll, remove, size, toString, values
public CopyOnReadMap()
このコンストラクタの処理は以下のソースコードと等価である。 new ConcurrentReadMap(new ConcurrentHashMap);
public java.util.Map<K,V> getDelegateMap() throws CopyOnReadMap.SnapshotCreationError
Map
オブジェクトを返す。
本クラスの実装では、変更点を一時的に保持するためのスナップショットが返される。
スナップショットに対する変更はsave()
で明示的に反映させる必要がある。getDelegateMap
クラス内 MapWrapper<K,V>
CopyOnReadMap.SnapshotCreationError
- セッション内にserialize不可能なオブジェクトが存在するなどの理由で、
セッションのスナップショットの作成に失敗した場合。public CopyOnReadMap<K,V> deactivate()
public CopyOnReadMap<K,V> setIgnoredEntries(K... entryNames)
entryNames
- 同期処理の対象外とするエントリのキー名public CopyOnReadMap<K,V> save() throws java.util.ConcurrentModificationException, CopyOnReadMap.SnapshotCreationError
java.util.ConcurrentModificationException
- スナップショットを作成してからこれまでの間に、
カレントスレッド以外によるアクセスがあった場合。CopyOnReadMap.SnapshotCreationError
- セッション内にserialize不可能なオブジェクトが存在するなどの理由で、
セッションのスナップショットの作成に失敗した場合。public void refresh()