1

アプリケーションでキャッシュに JCS を使用しています。最近、キャッシュ内のデータへの同時アクセスがnull 値になるというエラーが発生しています。つまり、1 つのスレッドがキャッシュに書き込み、もう 1 つのスレッドがキャッシュに読み取ります。JCS がキャッシュへの書き込みおよび読み取り時にスレッドセーフな実装を本質的にサポートしているかどうかを知りたいです。また、実装をスレッドセーフにする方法も知りたいです。複数のクラスがキャッシュに書き込むため、キャッシュへの書き込みには Runnable を実装する PutData を使用し、キャッシュからの読み取りには Runnable も実装する GetData を使用するとします。メソッド synchronized は意味がなく、データがクラス間で共有されておらず、データオブジェクトを個々のクラスに渡すため、それらをアトミックにすることも意味がありません.ところで、POJOシリアライズクラスを使用しています. とにかくこれを克服する方法はありますか、それとも書き込みと読み取りを強制的に完了するように実装を変更する必要がありますか?これはばかげていると思います。

これは、ここでのコンシューマ スレッドがデータを消費するのではなく、データを読み取るだけであるという事実を除いて、生産者と消費者の問題に似ています。そのため、同期は 1 つのスレッドのみがキャッシュに書き込むことを保証しますが、他のスレッドが異なるキーのオブジェクトにアクセスするため、これで問題は解決しません。

あなたの答えを期待しています、ありがとう、マドゥ。

4

2 に答える 2

0

JCS についてはわかりませんが、オブジェクトで同期できるので、キャッシュ オブジェクトで同期することをお勧めします。

このようなもの:

public void putToCache(...) { 
  synchronized (cache) { //cache is your actual cache instance here
   //put to cache here
  }
} 
于 2011-12-12T12:54:33.297 に答える