2

Java のマルチスレッド アプリケーションにソフトウェア強制コピー オン ライトを追加することは可能ですか? これは、同じオブジェクトへの参照を持つ複数のスレッドを意味しますが、1 つのスレッドがそのオブジェクトを変更しようとすると、指定されたオブジェクトがコピーされ、そのコピーを指すように参照が調整されます。

4

3 に答える 3

2

私が知っている唯一の実装は

java.util.concurrent.CopyOnWriteArrayList

見る

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html

および関連する Set クラス

java.util.concurrent.CopyOnWriteArraySet

そして最後に

org.apache.mina.util.CopyOnWriteMap

しかし、それはあなたの必要性に依存します。

于 2014-01-30T19:17:56.153 に答える
2

ご質問があれば、

Java ランタイム全体に対して全面的にコピー オン ライト動作を強制することは可能ですか?

答えは、

いいえ、Java にはそのような一般的な機能はありません。

実際、その目標に最も近いのは Clojure を使用することだと思います。そのデフォルトのデータ構造はすべて内部的にコピーオンライトであり、外部では単に不変オブジェクトです。

あなたが話している参照は、驚くべきことにrefs と呼ばれ、完全なメモリ内トランザクションをサポートしています。より単純な種類のリファレンスはatomで、これはあなたの説明に 100% 適合します。

コア API 全体が、これらの構造をスレッドセーフでロックフリーな方法でエレガントかつ控えめに操作することに専念しています。

于 2014-01-30T19:20:49.030 に答える
1

はい。遅延コピーは簡単に実装できますが、通常は自分で行う必要があります。

于 2014-01-30T19:11:26.693 に答える