分为懒汉式和饿汉式
饿汉式
- class Single
- {
- private static final Single s = new Single();//final可以不写,写上更加严谨
- private Single(){}
- public static Single getInstance()
- {
- return s;
- }
- }
复制代码
线程安全
懒汉式
- 懒汉式:实例的延迟加载
- class Single
- {
- private static Single s = null;
- private Single(){}
- public static Single getInstance()
- {
- if(s==null)
- s = new Single();
- return s;
- }
- }
复制代码
懒汉式是非线程安全的,所以需要改进以确保安全:
- 懒汉式在多线程访问时存在安全隐患可以将getInstance方法写成同步方法
- 为了提高效率,改写成同步代码块的形式
- class Single
- {
- private static Single s = null;
- private Single(){}
- //public static synchronized Single getInstance()//同步函数,效率低
- public static Single getInstance()
- {
- if(s==null)
- {
- synchronized(Single.class)//每次都判断if(s==null),效率低,多加一层判断
- {
- if(s==null)
- s = new Single();
- }
- }
- return s;
- }
- }
复制代码
所以一般还是用饿汉式 |
|