校招中最常考的
设计模式
之⼀.
单例模式具体的实现方式有很多,最常见的是
饿汉
和
懒汉
两种
饿汉模式:
类加载的时候同时创建实例。
类加载的时候同时创建实例。
class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
懒汉模式-单线程版
类加载的时候不创建实例,第一次使用时才创建实例
class
Singleton
{
private static
Singleton instance
=
null
;
private
Singleton
() {}
public static
Singleton
getInstance
() {
if
(instance ==
null
) {
instance =
new
Singleton
();
}
return
instance;
}
}
懒汉模式-多线程版
如果在多线程中沿用上面的懒汉模式是不安全的。
加上 synchronized 可以改善这⾥的线程安全问题.
class
Singleton
{
private static
Singleton instance
=
null
;
private
Singleton
() {}
public synchronized static
Singleton
getInstance
() {
if
(instance ==
null
) {
instance =
new
Singleton
();
}
return
instance;
}
}
线程安全的问题发生在首次创建实例的时候,如果在多个线程中调用getlnsance方法就可能导致创建出多个实例。
一旦实力已经创建好了,后面的线程再多也没有问题
加入synchronized就可以解决这种问题
&spm=1001.2101.3001.5002&articleId=149669247&d=1&t=3&u=2c7018d856484aeda48b5b659b39bf04)
6827

被折叠的 条评论
为什么被折叠?



