您的位置:首页 > 其它

单例设计模式及懒汉式线程安全问题

2017-05-15 00:00 337 查看

1.介绍

单例(singleton)设计模式:单态、原子设计模式。

单例设计模式作用:

它主要用来保证一个类在程序从启动到最后结束,要保证这个类的对象只有一个。单例就是保证一个类的对象是唯一的。

生活中的场景:

比如:A和B2个人去奶茶店买奶茶,老板在给A做奶茶时,B只能等待。只有给A做完奶茶后才能给B做奶茶。

结论:

单例设计模式解决就对象在堆内中只能开辟一个空间。
//饿汉式
class Singleton (){
//私有化构造
private Singleton(){};
//持有自身对象
private static Singleton s = new Singleton();
//对外提供方法
public Singleton getInstance(){
return s;
}
}
//懒汉式
class Singleton2 (){
//私有化构造
private Singleton2(){};
//持有自身对象
private static Singleton2 s2 = null;
//对外提供方法
public Singleton2 getInstance(){
if(s2 == null){
s2 = new Singleton2();
}
return s2;
}
}


懒汉式线程安全问题:

// 懒汉式:
class Singleton2 {
// 私有化构造
private Singleton2() {};
// 持有自身对象
private static Singleton2 s = null;
// 对外提供方法,获取对象
public static Singleton2 getInstance() {// t1 // t2
// 我在外面再加一次判断,那么除了第一次创建对象时会进入并且判断同步。
//接下来,再来更多线程,都不会进入if块。就不判断同步了,效率提高了。
if (s == null) {
// 加synchronized是为了第一次创建对象时线程安全。但是接下来,就不存在线程安全问题。还要判断同步效率低。
synchronized (Singleton2.class) {
if (s == null) {
s = new Singleton2();
}
}
}
return s;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息