6

私は ThreadSafeList を使用しており、プロセスから Web サーバーにデータをストリーミングし、クライアントに着信したときにデータをストリーミングして戻すために、それから大きなマイレージを得ています。メモリ内で、Spring Caching (ボンネットの下の ehcache) を使用して JVM にデータを保存していますが、すべて問題ありません。ヒープ制限に達し始めたときに問題が発生し、Spring Caching が使用中に ThreadSafeList をディスクにシリアル化し始め、ConcurrentModificationExceptions が発生しました。この問題を解決するために、シリアライゼーション インターフェイスのプライベートな writeObject および readObject メソッドを上書きできますか? これを行う方法がわかりません。または、ThreadSafeList を破棄する必要があるかどうかもわかりません。

このプログラムを開始したとき、私は BlockingDeque を使用していましたが、構造を入れたり取ったりするときにキャッシュ用のデータを思い出せなかったため、それだけでは十分ではありませんでした...順序付けが必要なため、ConcurrentMap を使用できません私のリストでは... ConcurrentNavigableMap を使用する必要がありますか? ThreadSafeList を使用して自分で作成したいのですが、カスタムのプライベート シリアル化関数を使用するのはもったいないのではないでしょうか?

Java Code Geeks ThreadSafeList

4

1 に答える 1

1

Collections.synchronizedList()リストをスレッドセーフにし、シリアル化をサポートします (基になるリストが Serializable の場合)。リストを繰り返し処理する必要がある場合は、忘れずにリストを同期してください。

例えば

@Cacheable
public List<String> getData(String clientName) {
    List<String> data = Collections.synchronizedList(new ArrayList<String>());
    // load data for the client from external process and add it to the list...
    return data;
}
于 2015-04-02T00:28:39.190 に答える