标签:
package com.sxh.singleton; public class SingleTon { /* * volatile关键字确保:当uniqueInstance变量被初始化为SingleTon实例时,多个线程能正确的处理uniqueInstance变量 * 分析:volatile修饰的成员变量,在每次被线程访问时,都强制性的从共享内存重读该成员的值; * 当值发生变化是,强制线程将变化值写入共享内存,任何时候不同线程总是看到你某个成员变量的同一个值 * */ private volatile static SingleTon uniqueInstance;//利用一个静态变量来记录SingleTon类的唯一实例 //其他有用的单件类的数据 private SingleTon(){} //类外无法访问 public static SingleTon getInstance(){ /* * 使用”双重检查加锁“,在getInstance中减少使用同步 * 首先检查是否实例已经创建了,如果尚未创建,才进行同步;只有第一次访问getInstance会同步 */ if(uniqueInstance==null){ //确保只有一个实例 synchronized (SingleTon.class) { //多线程的情况不会出现问题,线程同步问题 if(uniqueInstance==null){ uniqueInstance=new SingleTon();//如果我们不需要这个实例,则永远不会产生 } } } return uniqueInstance; } //其他有用的单件类的方法,单件类也可以是一般的类,具有一般的数据和方法 }
package com.sxh.singleton; public class SingleTon { private volatile static SingleTon uniqueInstance=new SingleTon(); //其他有用的单件类的数据 private SingleTon(){} //类外无法访问 public static SingleTon getInstance(){ return uniqueInstance; } //其他有用的单件类的方法,单件类也可以是一般的类,具有一般的数据和方法 }分析:对静态变量初始化,JVM在类加载时就马上创建唯一的单例对象;
标签:
原文地址:http://blog.csdn.net/sxhlovehmm/article/details/44493141