多语言展示
当前在线:773今日阅读:19今日分享:20

Java单例模式详解

单例模式是指系统中对于某类的使用只创建一个对象,不会创建多个。
工具/原料

java运行环境

方法/步骤
1

【普通单例模式:不支持线程同步】public class Singleton {        //直接初始化一个实例对象     private static Singleton sin=new Singleton();        //private类型的构造函数,保证其他类对象不能直接new一个该对象的实例      private Singleton(){        }          ///该类唯一的一个public方法        public static Singleton getSin(){             return sin;     }}弊端:该类加载的时候就会直接new 一个静态对象出来,当系统中这样的类较多时,会使得启动速度变慢 。现在流行的设计都是讲“延迟加载”,可以在第一次使用的时候才初始化第一个该类对象。所以这种适合在小系统。

2

【多线程安全单例模式实例1:在方法头部使用同步关键字】 public class Singleton {       private static Singleton instance;       private Singleton (){              }        public static synchronized Singleton getInstance(){    //对获取实例的方法进行同步       if (instance == null)              instance = new Singleton();        return instance;     } }弊端: 这样锁住了一个方法, 粒度有点大 ,改进就是只锁住其中java类就OK

3

【多线程安全单例模式实例2:锁住创建对象时的java类】public class Singleton {       private static Singleton instance;       private Singleton (){     }        public static Singleton getInstance(){    //对获取实例的方法进行同步       if (instance == null){           synchronized(Singleton.class){               if (instance == null)                   instance = new Singleton();            }       }       return instance;     }      }这是比较完善的单例模式!

注意事项

使用这几种不同写法的单例模式需要考虑使用的场景和系统的大小,如并发环境,大的软件系统

推荐信息