单例模式-静态内部类

 1 /**
 2  * 单例模式-静态内部类
 3  */
 4 public class SingletonTest07{
 5     public static void main(String[] args) {
 6         Singleton instanceOne = Singleton.getInstance();
 7         Singleton instanceTwo = Singleton.getInstance();
 8         // out: true
 9         System.out.println(instanceOne == instanceTwo);
10     }
11 }
12 
13 /**
14  *  静态内部类实现方式
15  */
16 class Singleton {
17     /**
18      * 1.构造器初始化,外部不能new
19      */
20     private Singleton() {
21 
22     }
23 
24     /**
25      * 2.写一个静态内部类,直接返回Singleton
26      */
27     private static class SingletonInstance {
28         private static final Singleton INSTANCE = new Singleton();
29     }
30 
31     /**
32      * 3.提供一个静态的公有方法,
33      *     直接返回SingletonInstance.INSTANCE
34      */
35     public static Singleton getInstance() {
36         return SingletonInstance.INSTANCE;
37     }
38 }

静态内部类

优缺点说明:

1) 这种方式采用了类装载的机制来保证初始化实例式只有一个线程。

2 ) 静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。

3) 类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程时无法进入的。

4) 优点: 避免了线程不安全,利用静态内部类特点实现延迟加载,效率高。

5) 结论:推荐使用

posted @ 2020-10-31 10:20  树树树  阅读(373)  评论(0)    收藏  举报