0

これは私の前の質問のフォローアップです。

読み取り専用ファイルを使用するサーバー アプリケーションがあるとします。ときどき (数時間に 1 回など) このファイルを更新すると、アプリケーションは更新されたデータで動作を開始します。

それを実装する方法は?アプリケーションは定期的に更新をチェックし、更新が利用可能な場合はファイルを更新する必要があると思います。ファイルが更新されると、アプリケーションは必要なすべての初期化 (たとえば、内部キャッシュの無効化など) を実行しながら、「古い」データを処理する必要があります。初期化が完了すると、「古い」データは破棄され、「新しい」データでのみ機能します。

それは理にかなっていますか?この問題は非常に一般的に見えます。この問題を解決する市販の Java インフラストラクチャはありますか?

4

2 に答える 2

3

キャッシュのように聞こえます。2 つの柔軟なスレッド セーフ キャッシュの実装は、Guava のキャッシュEhCacheまたはHazelcastです。3 つすべてが期限切れになり、スレッド セーフな方法でリロードされます。Hazelcast と EhCache は、ネットワーク経由で配布できます。Guava は配布されていませんが、はるかに単純です。

キャッシュを使用したくないと判断した場合、シングルトンのようなメモリオブジェクトに長時間保持される他の一般的なユースケースは、ダブルチェックロックです。Guava は、そのSuppliers memoize 関数を使用して、はるかにエレガントにします。

キャッシュまたは@MarkoTopolnikの提案で不変オブジェクトを使用することをお勧めしますvolatile

于 2013-03-09T11:43:33.050 に答える
1

ファイルから読み取られた、すべてのデータとそれに由来するサービスを表す単一のオブジェクトが必要です。そのオブジェクトへの参照を維持volatileします。これにより、スレッドセーフな公開が保証されます。

于 2013-03-09T12:04:20.320 に答える