- まず、定義
- クラスはインスタンスを1つだけ持っていることを確認し、それをアクセスするために、グローバルアクセスポイントを提供するために、
- 第二に、アプリケーションシーン
- 頻繁には、オブジェクトを作成するのにかかる時間を節約し、オブジェクトを使用するが、状態の頻繁な変更の目的は、単一のケースのモデルに適していないため
- 圧力GCを低減する、新しい動作が低減されるので、システム・メモリの使用頻度が低減され、GCの休止時間を短縮します
- 第三に、例
- 実施形態は、Java言語で一般的にシングルモードでは、2つのメンバ・メソッドがあります。
- 飢え機器:全体構成のシングルトンインスタンスクラスがロードされています
- レイジーモード:シングルトンインスタンスは、それが使用される最初の時間の全体的な構造を意味します
- 飢えた方法(スレッドセーフ)
public class Singleton1 { //在静态初始化器中创建单例实例,这段代码保证了线程安全 private static Singleton1 uniqueInstance = new Singleton1(); //Singleton类只有一个构造方法并且是被private修饰的,所以用户无法通过new方法创建该对象实例 private Singleton1(){} public static Singleton1 getInstance(){ return uniqueInstance; } }
- レイジー方法(非スレッドセーフ)
public class Singleton2 { private static Singleton2 uniqueInstance; private Singleton2 (){ } //没有加入synchronized关键字的版本是线程不安全的 public static Singleton2 getInstance() { //判断当前单例是否已经存在,若存在则返回,不存在则再建立单例 if (uniqueInstance == null) { uniqueInstance = new Singleton2(); } return uniqueInstance; }
- 怠惰な人間の(スレッドセーフ)
public class Singleton3 { private volatile static Singleton3 uniqueInstance; private Singleton3 (){ } //没有加入synchronized关键字的版本是线程不安全的 public static Singleton3 getInstance() { synchronized(Singleton3.class) { //判断当前单例是否已经存在,若存在则返回,不存在则再建立单例 if (uniqueInstance == null) { uniqueInstance = new Singleton3(); } } return uniqueInstance; } }
- 怠惰な人間の(ダブルチェックロックバージョン)
public class Singleton4 { //volatile保证,当uniqueInstance变量被初始化成Singleton实例时,多个线程可以正确处理uniqueInstance变量 private volatile static Singleton4 uniqueInstance; private Singleton4() { } public static Singleton4 getInstance() { //检查实例,如果不存在,就进入同步代码块 if (uniqueInstance == null) { //只有第一次才彻底执行这里的代码 synchronized (Singleton4.class) { //进入同步代码块后,再检查一次,如果仍是null,才创建实例 if (uniqueInstance == null) { uniqueInstance = new Singleton4(); } } } return uniqueInstance; } }
- 怠惰(式登録/モード静的内部クラス)
public class Singleton5 { private static class SingletonHolder { private static final Singleton5 INSTANCE = new Singleton5(); } private Singleton5 (){} public static final Singleton5 getInstance() { return SingletonHolder.INSTANCE; } }
- 飢えモード(列挙)
////这种实现方式还没有被广泛采用,但这是实现单例模式的最佳方法。 它更简洁,自动支持序列化机制,绝对防止多次实例化 (如果单例类实现了Serializable接口,默认情况下每次反序列化总会创建一个新的实例对象) public enum Singleton6 { //定义一个枚举的元素,它就是 Singleton 的一个实例 INSTANCE; public void doSomeThing() { System.out.println("枚举方法实现单例"); } }
4.シングルトン
おすすめ
転載: www.cnblogs.com/zhongj/p/11239349.html
おすすめ
ランキング