Javaシングルトンパターンを実装する方法
1. シングルトン パターンとは何ですか?
シングルトン: クラスにインスタンスが 1 つだけあることを確認し、それにアクセスするためのグローバル アクセス ポイントを提供します。
シングルトン パターンは、一般的に使用されるソフトウェア設計パターンの 1 つであり、その目的は、アプリケーション全体にクラスのインスタンスが 1 つだけ存在するようにすることです。
たとえば、システムを起動するときに、アプリケーションのライフサイクル全体を通じて表示され、一意であるいくつかの公開構成情報をロードする必要があります。この場合、それをシングルトン モードで設計する必要があります。例: スプリング コンテナ、セッション ファクトリ、キャッシュ、データベース接続プールなど。
2. インスタンスの一意性を確保する方法
1) 外部初期化を防ぐ
2) クラス自身でインスタンス化する 3) インスタンス化は 1 回のみ保証する
4) インスタンスを取得する外部メソッドを提供する
5) スレッドセーフ
3. いくつかの単純な収益モデルの比較
(1) お腹が空いた中華風
「お腹が空いたので、遅滞なくすぐに食べなければなりません」、静的プライベート変数を定義しながらクラスのインスタンス化を実行します。
public class Singleton { private static final Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; } }
①静的なプライベートクラス変数を宣言してすぐにインスタンス化し、インスタンス化が1回であることを保証します
②外部インスタンス化を防ぐプライベート構築(リフレクションを通じてインスタンス化できますが、この状況は考慮されていません)
③パブリックを提供します getInstance() メソッドは、次の目的で使用されます。シングルトンインスタンスを外部から取得
利点: スレッドの安全性、インスタンスの高速な取得 欠点: クラスのロードはインスタンスの初期化を意味し、メモリの無駄
(2) 怠惰なスタイル
「この人は怠惰なので、それを待ってください」それが必要です」、遅延読み込み。
public class Singleton { private static Singleton singleton = null; private Singleton() { } public static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
メリット: インスタンスを取得する方法で、インスタンスを初期化し、システムリソースを節約します
デメリット: ①インスタンス取得時に初期化作業が多いと、読み込み速度が遅くなり、システムパフォーマンスに影響します
②インスタンスを取得するたびに非 null チェックが必要となり、システムのオーバーヘッドが高くなります。 複数のスレッドが同時に getInstance() にアクセスすると、複数のインスタンスが生成される可能性があります。変換:
1) 同期ロック
public synchronized static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; }
利点: スレッドの安全性、欠点: インスタンスを取得するたびにロックが必要になり、リソースを消費します。実際、インスタンスが生成されている限り、ロックは必要ありません。後続の取得のために再度ロックします
2) ダブルチェックロック
public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; }
長所: スレッドセーフ、二重チェック、インスタンスが初期化される前にのみ同期を保証、高効率 短所: インスタンスが空でないかどうかをまだ判断し、消費する特定のリソース
3) 静的内部クラス
public class Singleton { private Singleton() { } private static class SingletonHolder { private static final Singleton singleton = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.singleton; } }
利点: 両方 同期によるパフォーマンスの低下を回避し、読み込みを遅らせることができます
(3) 列挙型
public enum Singleton { INSTANCE; public void init() { System.out.println("资源初始化。。。"); } }
は当然ながらスレッドセーフであり、リフレクションの生成を防ぎますインスタンス。
4. シングルトンパターンの利点と欠点

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
