私があなたの必要性をよく理解しているなら、あなたはいくつかの文脈で、繊細な何かを求めています。私が正しく理解しているかどうかを確認するために、例を試してみましょう:
- スレッドT1はキャッシュ内のpojoPを読み取り、バージョンP1を取得します。
- スレッドT2はキャッシュ内のpojoPを読み取り、バージョンP1を取得します。
- スレッドT2はトランザクションを開始し、同じpojoを読み取り、バージョンP2を作成する値を変更します。
- スレッドT1はキャッシュ内のpojoPを読み取りますが、バージョンP1を取得します。これには、ポイント3で、T2が同じオブジェクトではなくバージョンP1のコピーP2を受信する必要があります。
- スレッドT2はPを保存し、T1とT2のどちらでも何も変更されず、バージョンが異なります。
- スレッドT2はトランザクションを閉じます
。ロールバックの場合、T2はT1と同様にP1を使用します。
b。コミットした場合、T2は引き続きP2を使用します。ただし、T1はP2も使用する必要があります。
これは複雑な問題であることがわかります。過小評価しないでください。すでに理論レベルでは、解決すべき多くの問題があります(そして、コーディングするとさらに多くの問題が発生します...)。アーキテクチャを正常に使用するには、アーキテクチャを明確にする必要があります。そうでなければ、あなたはあなたの精神的な正気を危険にさらします;-)
まず、あなたは本当にそのようなものが欲しいことを確認する必要があります!
あなたが本当にそれを望むなら..
テクニカルコード(AOP、ThreadLocal)を使用して、このトリッキーな複雑さを関数型コードから隠すことをお勧めします。