問題タブ [happens-before]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 並べ替えの問題がありますか?それは参照エスケープが原因ですか?
私はインスタンスをキャッシュし、それらを使用するときにそれらを複製するこのクラスを持っています (データは変更可能です)。
これで並べ替えの問題に直面できるのだろうか。
この回答と JLSを見てきましたが、まだ自信がありません。
私の考え:DataWrapper
ランタイムは、オブジェクトを初期化する前に、コンストラクターでステートメントを並べ替えて、現在のインスタンスを発行する(マップに入れる) ことができdata
ます。2 番目のスレッドDataWrapper
がマップからインスタンスを読み取り、nulldata
フィールド (または部分的に構築された) を確認します。
これは可能ですか?はいの場合、それは参照エスケープのみによるものですか?
そうでない場合は、事前発生の一貫性をより簡単に説明する方法を説明していただけますか?
私がこれをした場合:
それはまだ同じ問題を起こしやすいですか?
複数のスレッドが同時に同じ値のインスタンスを作成して配置しようとした場合に、1 つまたは 2 つの余分なインスタンスが作成されてもかまわないことに注意してください。
編集:
name フィールドと data フィールドが final または volatile の場合はどうなるでしょうか?
まだ危険ですか?私の知る限り、コンストラクターの初期化の安全性の保証は、初期化中に参照がエスケープされていない場合にのみ適用されます。これを確認する公式の情報源を探しています。