Java设计模式_单例设计模式
2017-02-28 20:40
113 查看
/** * 单例设计模式:饿汉式,不适用于多线程,效率低 */ public class SingleTest { //定义一个私有的构造方法 private SingleTest() {} //将自身的实例对象设置成静态 final private static final SingleTest instance = new SingleTest(); private static SingleTest getInstance(){ return instance;}}/*** 单例设计模式:饱汉式,非线程安全*/public class SingleTest {//定义一个私有的构造方法private SingleTest(){}//将自身的实例对象设置成静态(不初始化,没有final修饰)private static SingleTest instance ;private static SingleTest getInstance(){if(instance==null)instance = new SingleTest();return instance;}}
/*** 单例设计模式:饱汉式,线程安全,效率不高*/public class SingleTest {//定义一个私有的构造方法private SingleTest(){}//将自身的实例对象设置成静态(不初始化,没有final修饰)private static SingleTest instance ;private static synchronized SingleTest getInstance(){if(instance==null)instance = new SingleTest();return instance;}}
/*** 单例设计模式:饱汉式,最优解*/public class SingleTest {//定义一个私有的构造方法private SingleTest(){}//将自身的实例对象设置成静态(不初始化,没有final修饰,使用volatile保证了线程访问时instance变量的可见性,// 避免了instance初始化时其他属性还没赋值完时被另外的线程调用)private static volatile SingleTest instance ;private static SingleTest getInstance(){// 对象实例化时与否判断(不使用同步代码块,instance不等于null时,直接返回对象,提高运行效率)if(instance==null){//同步代码块(对象未初始化时,使用同步代码块,保证多线程访问时对象在第一次创建后,不再重复被创建)synchronized (SingleTest.class){//未初始化,则初始instance变量if(instance==null)instance = new SingleTest();}}return instance;}}
相关文章推荐
- 用Java实现的设计模式系列(3)--Builder
- Java设计模式
- 在Java中应用设计模式 - Factory Method
- java设计模式之创建模式--singleton
- 深入浅出基于Java的解释器设计模式
- 用Java实现的设计模式系列(1)-Factory
- 深入浅出基于Java的代理设计模式
- Java设计模式专辑
- Java设计模式使用率爬行榜
- Java的建造设计模式
- 追MM与设计模式(java的32种设计模式)
- Java设计模式之Factory
- Java设计模式之Factory
- Java设计模式使用率爬行榜
- [收藏]追MM与JAVA设计模式
- Java设计模式之工厂模式篇
- 追MM与Java的23种设计模式
- 从Java类库看设计模式
- 追MM与Java的23种设计模式
- 在Java中应用设计模式 - Factory Method