[解決済み] Java の静的イニシャライザはスレッドセーフか?
2022-05-28 11:49:22
質問
静的コードブロックを使って、レジストリ内のいくつかのコントローラを初期化しています。質問は、したがって、この静的コードブロックが、クラスが最初にロードされたときに一度だけ絶対に呼び出されることを保証できるでしょうか。このコードブロックがいつ呼ばれるかを保証できないことは理解していますが、クラスローダーが最初にロードするときだと思います。私は静的なコードブロックのクラスで同期することができると理解していますが、私の推測では、これは実際にとにかく何が起こるのでしょうか?
簡単なコード例は次のとおりです。
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
とか、こうすればいいのか。
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}
どのように解決するのですか?
Java の静的イニシャライザはスレッドセーフです(最初のオプションを使用してください)。
しかし、コードが正確に一度だけ実行されることを確実にしたい場合、クラスが単一のクラスローダーによってのみロードされることを確認する必要があります。静的な初期化はクラスローダーごとに一度だけ実行されます。
関連
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 静的クラスとシングルトンパターンの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
Java Exceptionが発生しました エラー解決
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
プロローグでのコンテンツは禁止されています
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
Java(1)仕上げの基本概念+eclipseのインストール構成