关闭

java中的单例模式

68人阅读 评论(0) 收藏 举报
分类:

含义:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

优点:减少系统开销

实现方式:1.饿汉式

                    2.懒汉式

                    3.双重检测锁式

                    4.静态内部类式

                    5.枚举单例

饿汉式:

package pattern;

public class SingletonDemo01 {
    private static SingletonDemo01 instance = new SingletonDemo01();
    private SingletonDemo01()
    {
        
    }
    public static SingletonDemo01 getinstance()
    {
        return instance;
    }
}


可以看出这种方法,instance实例的创建是在jvm初始化这个类时产生的,是没有延时加载的

想一想别的类中能否实例化这个对象,显然是不能的,因为它的构造器是私有的。

懒汉式:

package pattern;

public class SingletonDemo02 {
   private static SingletonDemo02 s;
   private SingletonDemo02()
   {
       
   }
   public static synchronized SingletonDemo02 getinstance()
   {
       if(s==null)
       {
        s= new SingletonDemo02();   
       }
       return s;
   }
}



这种懒汉式的方法虽然解决了延时加载的问题,但是会导致并发效率的降低,而且其实同步只需要第一次即可。

因为synchronized关键字的加入,使得不会同时有两个线程可以进入这个方法

双重检测锁式

package com.zw.mymaven;

public class SingletonDemo3 {
    private volatile static SingletonDemo3 instance;

    private SingletonDemo3() {
    };

    public static SingletonDemo3 getinstance() {
        if (instance == null) {
            synchronized (SingletonDemo3.class) {
                if (instance == null) {
                    instance = new SingletonDemo3();
                }
            }
        }
        return instance;
    }
}


静态内部类式

public class Singleton {    
    private static class LazyHolder {    
       private static final Singleton INSTANCE = new Singleton();    
    }    
    private Singleton (){}    
    public static final Singleton getInstance() {    
       return LazyHolder.INSTANCE;    
    }    
}  
枚举单例请自行百度

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17680次
    • 积分:1014
    • 等级:
    • 排名:千里之外
    • 原创:86篇
    • 转载:17篇
    • 译文:0篇
    • 评论:1条
    最新评论