单例模式


单例模式

单例模式有饿汉式单例模式、懒汉式单例模式和双检锁单例模式三种。

单例模式的好处

单例模式确保一个类只有一个实例对象,并提供了一个全局访问点来访问这个实例

这对于需要控制资源使用或需要共享资源的情况非常有用,比如数据库连接池,通过单例模式,可以避免对资源的重复创建和销毁,从而提高资源利用率和系统性能。

饿汉式:线程安全,一开始就初始化。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Singleton {
//单例模式。保证一个类只有全局示例唯一 避免了创建对象的开销 。提供一个供外面获取对象的方法
//饿汗式 线程安全
private static Singleton singleton = new Singleton();

//private不让外界创建
private Singleton() {}

//public为外界访问
public Singleton getSingleton() {
return singleton;
}
}

懒汉式:非线程安全,延迟初始化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Singleton {
//单例模式。保证一个类只有全局示例唯一 避免了创建对象的开销 。提供一个供外面获取对象的方法
//懒汉式 线程不安全
private static Singleton singleton;

//private不让外界创建
private Singleton() {}

//public为外界访问
public Singleton getSingleton() {
if(singleton==null) {
singleton = new Singleton();
}
return singleton;
}
}

双重检验锁机制:线程安全,延迟初始化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Singleton {
//单例模式。保证一个类只有全局示例唯一 避免了创建对象的开销 。提供一个供外面获取对象的方法
//双重检验锁
private volatile static Singleton singleton;

//private不让外界创建
private Singleton() {}

//public为外界访问
public Singleton getSingleton() {
if(singleton==null) {
//获取锁去创建对象
synchronized (Singleton.class){
//避免获取锁之后其它线程已经创建了对象
if(singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}

文章作者: 是小康呀~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 是小康呀~ !
评论
  目录