問題タブ [java-memory-model]

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.

0 投票する
4 に答える
5690 参照

java - HashMap スレッドセーフを設定していますか?

HashMapのプログラムには、複数のスレッドによってアクセスされ、1 つのスレッドによって設定されることがあります。

例えば:

これは、複数のスレッドによってアクセスされます。1 時間に 1 回、1 つのスレッドが以下を呼び出します。

私の質問は、これがスレッドセーフかどうかです。両方のマップが常にキーを持っている場合、存在しない"importantKey"ときに読み取りスレッドがマップにアクセスすることは可能ですか?"importantKey"

編集:

回答のおかげで、この質問は実際にはHashMap. オブジェクト参照の代入についての質問でした。

0 投票する
4 に答える
260 参照

java - 「最終的な」変数へのスレッドセーフだが高速アクセス?

私はこのようなサーバーを持っています:

ご覧のとおり、リクエストを処理するスレッドと、サーバーを開始するスレッドがあります。初期化が完了する前にリクエストが来る可能性があるため、IllegalStateException.

ここで、このスレッドを安全にするには (つまり、リクエスト ハンドラ スレッドがinit 直後の古いnull値のバージョンを認識しないようにするため)、worker を volatile にするか、同期するか、またはそのような作業を行う必要があります。worker

ただし、init が完了すると、worker再び変更されることはないため、事実上最終的なものになります。したがって、発生する可能性のあるロック競合は無駄に思えます。では、ここで私ができる最も効率的なことは何ですか?

実用的な意味ではあまり重要ではないことはわかっていますが (ネットワーク リクエストを読み取るなどの面倒な作業をすべて行うと、単一のロックがどのような意味を持つのでしょうか?)、好奇心から知りたいと思います。

0 投票する
2 に答える
1025 参照

java - プリミティブ データが Java メモリに格納されているオブジェクトの一部である場合は?

スタックメモリにはプリミティブ型とオブジェクトのアドレスが格納され、オブジェクトの値はヒープメモリに格納されることを知っています。

しかし、プリミティブがオブジェクトの一部である場合、ヒープまたはスタックのどこに格納されますか?

どうすれば確認できますか?

ありがとう。

0 投票する
2 に答える
1147 参照

java - Javaでの同期とコードの並べ替え

一部のリンクでは、同期ブロック内のコードの並べ替えが可能であることが示されていますが、他のサイトでは不可能であると伝えられています。同期が使用されている場合、コードの並べ替えに関して実際に何が起こるかを説明する例を教えてください。

0 投票する
2 に答える
172 参照

java - 「オブジェクトのデフォルトの初期化は、プログラムの他のアクション (デフォルトの書き込み以外) の前に発生します」とはどういう意味ですか?

Java 言語仕様 7、セクション 17.4.5:

正確にはどういう意味ですか?デフォルトの初期化とは何ですか? 例を挙げていただけますか?

0 投票する
3 に答える
403 参照

java - Javaオブジェクトをインスタンス化するとき、親クラスのオブジェクトは自動的に作成されますか?

オブジェクトを作成し、親クラスの 1 つのコンストラクターが実行されるとします。このコンストラクターを使用すると、親の新しいオブジェクトも舞台裏で作成されますか?

そうでない場合private、親クラスのフィールドはどこに保存されていますか? 実際にsuperは、呼び出し元のオブジェクトから見えないプライベート フィールドを操作する親オブジェクトの任意のメソッド ( の有無にかかわらず) を呼び出すことができます。

Java メモリ モデルに最も精通している方であれば、その回答を歓迎します。