- 单例模式用于保证在程序的运行期间某个类有且仅有一个实例。
- 饿汉式:
- class SingleClass{
-
- //将构造函数私有化,不允许在类的外部创建该类的实例
- private SingleClass(){}
- /*创建该类的实例,并将其私有化,
- *该实例 需要在方法调用,因此也必须是静态的
- *对象一创建,就进行初始化,这种叫做饿汉式
- */
- private static SingleClass singleInstance = new SingleClass();
- /*对外提供方法来获取该类的实例,该方法必须通过public修饰
- *该方法只能被类名调用,因此,方法必须是静态的
- *调用该方法是为了获取该类的实例,因此,该方法的返回值类型是该类类型*/
- public static SingleClass getInstance(){
- return singleInstance;
- }
- }
-
- 懒汉式
-
- class SingleClass{
- private SingleClass(){}
-
- private static SingleClass singleInstance =null;
-
- public static SingleClass getInstance(){
-
- /*如果对象为null,才创建*/
- if (singleInstance == null)
- singleInstance = new SingleClass();
-
- return singleInstance;
- }
- }
- 懒汉式的线程安全问题
- public static SingleClass getInstance(){
- //这里会牵涉到线程安全问题,在保证同步的情况下注重效率
- //在此处判断一次,若已经创建实例,就不在判断锁,稍微提高效率
- if(singleInstance ==null) {
- //此处加锁,保证只有一个线程创建实例
- synchronized(SingleClass.class){
- if (singleInstance == null)
- singleInstance = new SingleClass();
- }
- }
- return singleInstance;
- }
复制代码 |