:「カタログ」Javaオブジェクト構造のスレッドセーフパブリッシング?私は次のコードを持っていると仮定すると
final Catalog catalog = createCatalog();
for (int i = 0; i< 100; i++{
new Thread(new CatalogWorker(catalog)).start();
}
は、オブジェクト構造、および方法createCatalog()であり、「カタログ」オブジェクトの構造は、念頭に置いて並行処理で書かれていません。製品カタログ内のいくつかの非ファイナル、非揮発性の参照がありますが、そこでも変更可能な状態であってもよい(それがを処理する必要がありになるだろう)
私はメモリモデルを理解する方法、このコードではありませんスレッドセーフです。それを安全にする簡単な方法はありますか? (スレッドが行動に爆発する前に、この問題の一般化バージョンはに作成された共有構造のシングルスレッドの建設については本当にある)
うーん、興味深い:「効果的に不変」な状態が存在していても、すべての更新を可変状態に同期させると安全だと言っていますか? (私はこれがメンテナンスの観点から危険なモデルであることを知っています) – krosenvold
一般的には安全だとは言いませんが、純粋なメモリモデルの言葉では安全です。 *アップデートだけでなくすべての*アクセスを同期する必要があることに注意してください。そうしないと、読み込み時に "古い"データが得られる可能性があります。 –
である。いい答えだ ;) – krosenvold