码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式:饿汉式与懒汉式

时间:2019-05-24 00:52:45      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:singleton   runtime   time   饿汉   对象   保存   形式   getc   线程安全   

单例模式

唯一的实例

注意:私有化构造器自行创建(含有一个该类的静态变量来保存唯一实例)必须自行向整个系统提供这个实例(对外提供获取该实例对象的方式:1、直接暴露2、静态变量的get方法获取)

几种常见形式

饿汉式:直接创建对象,不存在线程安全问题

直接实例化饿汉式简洁直观

枚举式 最简洁

静态代码块饿汉式 适合复杂实例化

饿汉式方式一:

public class Singleton1 {
public static final Singleton1 SINGLETON1 = new Singleton1();
private Singleton1() {
}
}

饿汉式方式二:

public enum Singleton2 {
SINGLETON;
}

饿汉式方式三:


public class Singleton3 {
public static final Singleton3 SINGLETON3;
private String info;
static {
try {
Properties properties = new Properties();
properties.load(Singleton3.class.getClassLoader().getResourceAsStream("singleton.properties"));
SINGLETON3 = new Singleton3(properties.getProperty("info"));
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
private Singleton3(String info){
this.info= info;
}
@Override
public String toString() {
return "Singleton3 [info=" + info + "]";
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}

懒汉式:延迟创建对象

线程不安全 适用于单线程

线程安全 适用于多线程

静态内部类形式 适用于多线程

线程安全


public class Singleton4 {
private static Singleton4 singleton4;
private Singleton4() {
}
public static Singleton4 getSingleton() {
if (singleton4==null) {
synchronized (Singleton4.class) {

if (singleton4 == null) {
return singleton4 = new Singleton4();
}
}
}
return singleton4;
}
}

静态内部类方法


public class Singleton5 {
private Singleton5(){
}
private static class Single{
private final static Singleton5 SINGLETON = new Singleton5();
}
public static Singleton5 getSingleton() {
return Single.SINGLETON;
}
}

总结

饿汉式:枚举形式最简单

懒汉式:静态内部类形式最简单

单例模式:饿汉式与懒汉式

标签:singleton   runtime   time   饿汉   对象   保存   形式   getc   线程安全   

原文地址:https://www.cnblogs.com/1012dk/p/10915409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!