1 package com.javaee.corejava;
2 /**
3 * 线程安全的单例模式
4 * @author miaoyf
5 *
6 */
7 public class Singleton {
8 /**
9 * 私有静态常量单例对象
10 * volatile:
11 * 用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),
12 * 线程中对A的访问其实访问的是B。
13 * 只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。
14 * volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A)
15 */
16 private static volatile Singleton instance=null;
17 /**
18 * 私有化构造函数,防止通过构造函数被初始化
19 */
20 private Singleton(){
21
22 }
23 /**
24 * 返回单例实例
25 */
26 public static Singleton getInstance(){
27 if(instance==null){
28 synchronized (Singleton.class) {
29 if(instance==null){
30 instance=new Singleton();
31 }
32 }
33 }
34 return instance;
35 }
36 }