[解決済み] Java シングルトンと同期
2022-07-18 22:49:04
質問
シングルトンとマルチスレッドに関する私の疑問を明らかにしてください。
- マルチスレッド環境で、Java で Singleton を実装する最良の方法は何でしょうか? 環境において、シングルトンを実装する最良の方法は何ですか?
-
複数のスレッドが
getInstance()
メソッドに同時にアクセスしようとするとどうなりますか? -
シングルトンの
getInstance()
synchronized
? - シングルトンクラスを使用する場合、同期は本当に必要なのでしょうか?
どのように解決するのですか?
はい、必要です。遅延初期化でスレッドセーフを実現するために、いくつかの方法があります。
ドラコニアン同期。
private static YourObject instance;
public static synchronized YourObject getInstance() {
if (instance == null) {
instance = new YourObject();
}
return instance;
}
この解決策では すべての を同期させる必要がありますが、実際には最初の数個だけが同期させる必要があります。
private static final Object lock = new Object();
private static volatile YourObject instance;
public static YourObject getInstance() {
YourObject r = instance;
if (r == null) {
synchronized (lock) { // While we were waiting for the lock, another
r = instance; // thread may have instantiated the object.
if (r == null) {
r = new YourObject();
instance = r;
}
}
}
return r;
}
この解決策は、シングルトンを取得しようとする最初の数スレッドだけが、ロックを取得するプロセスを経る必要があることを保証します。
private static class InstanceHolder {
private static final YourObject instance = new YourObject();
}
public static YourObject getInstance() {
return InstanceHolder.instance;
}
このソリューションは、スレッドセーフを確保するために、クラスの初期化に関するJavaのメモリモデルの保証を利用します。各クラスは一度だけロードすることができ、必要なときだけロードされます。つまり、最初の
getInstance
が呼び出されたときに
InstanceHolder
がロードされ
instance
が作成され、これは
ClassLoader
によって制御されるので、追加の同期は必要ありません。
関連
-
ApplicationContextの起動エラーです。条件レポートを表示するには、アプリケーションを'de'で再実行します。
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Pythonでシングルトンを作成する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ApplicationContextの起動エラーです。条件レポートを表示するには、アプリケーションを'de'で再実行します。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
switch case文のcaseの後の列挙定数は列挙型なし
-
htmlとwordの相互変換の実装(画像あり)
-
[解決済み】Javaでシングルトンパターンを実装するための効率的な方法は何ですか?[クローズド]