胖蔡说技术
随便扯扯

Java实现单例模式

Java中对于单例模式的使用涉及到方方面面。如Andoird开发中SharePreference工具类、图片缓存类的使用均使用到了单例模式。那么,下面来了解下Java中的单例模式,以及如何创建使用单例模式。

介绍

单例模式属于常见的Java 23中设计模式之一,归属于设计模式的创建型模式。其基本设计思想是设计某个类只能创建一个实例,使得单进程访问提供一个统一的入口。通过百科可以了解它的定义如下:

Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”

百度百科

实现

如下,提供几种线程安全的Java单例模式的实现。

饱汉模式


private static  Singleton singleton=null; //饱汉模式
    //线程不安全
    private static Singleton newInstance(){
        if (singleton==null){
            singleton=new Singleton();
        }
        return singleton;
    }

    private Singleton(){
        //设置new权限
    }


    //线程安全
    private synchronized static Singleton newInstance(){
        if (singleton==null){
            singleton=new Singleton();
        }

        return singleton;
    }

饿汉模式

 private static final Singleton singleton=new Singleton(); //线程安全,饿汉模式

 private Singleton(){
    //设置new权限
 }

 public static Singleton newInstance(){
    return singleton;
 }

懒汉模式


      /**
        * volatile 线程安全,具有可见性,但不具有原子性(synchronized 具有可见性和原子性)
        */
        private static volatile Singleton singleton=null;

        private Singleton(){
               //设置new权限
           }

          /**
            * 单例获取
            * @return
            * 线程安全
            */
           public /**synchronized **/static Singleton newInstance(){
               if (singleton==null){
                   //线程不安全
       //            singleton=new Singleton();  //非原子操作,包括多个数据域的赋值
                   synchronized (Singleton.class){
                       singleton=new Singleton();
                   }
               }
               return singleton;
           }

Enum模式

public enum Test{
       INSTANCE;
       public void test(){
             ......
          //method body
             ......
       }
}
赞(0) 打赏
转载请附上原文出处链接:胖蔡说技术 » Java实现单例模式
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏