Java中的单例模式三种类型
程序员文章站
2022-03-10 10:45:43
饿汉式特点:1.类加载时就创建2.对象只创建一次3.天生线程安全创建过程1.对象作为属性,且私有静态final修饰2.构造方法私有化3.提供获取对象的方法/** * 单例模式 * 饿汉式 * @author lzp * @Date 2020年7月30日 */public class SingleTon { private static final SingleTon singleTon = new SingleTon(); private Single...
饿汉式
特点:
- 1.类加载时就创建
- 2.对象只创建一次
- 3.天生线程安全
创建过程
- 1.对象作为属性,且私有静态final修饰
- 2.构造方法私有化
- 3.提供获取对象的方法
/**
* 单例模式
* 饿汉式
* @author lzp
* @Date 2020年7月30日
*/
public class SingleTon {
//设置私有静态final,外部无法访问,且且类加载时就创建,并只创建一次
private static final SingleTon singleTon = new SingleTon();
private SingleTon() {
}
public static SingleTon getInstance() {
return singleTon;
}
}
懒汉式
特点:
- 1.类在需要时才创建
- 2.对象只创建一次
- 3.线程不安全,可以使用同步方法保证线程安全
创建过程
- 1.对象作为属性,且私有静态修饰
- 2.构造方法私有化
- 3.提供获取对象的方法
- 4.可以使用同步代码块或者同步方法来保障线程安全
/**
* 单例模式
* 懒汉式
* @author lzp
* @Date 2020年7月30日
*/
public class SingleTon2 {
private static SingleTon2 singleTon = null;
private SingleTon2() {
}
// 同步方法
// public static synchronized SingleTon2 getInstance() {
// if(singleTon == null) {
// singleTon = new SingleTon2();
// }
// return singleTon;
// }
//同步代码块 代码量较多时更优化
public static SingleTon2 getInstance() {
if (singleTon == null) {
synchronized (SingleTon.class) {
if (singleTon == null) {
singleTon = new SingleTon2();
}
}
singleTon = new SingleTon2();
}
return singleTon;
}
}
静态内部类方式
特点:
- 1.线程安全
- 2.用时才创建
- 结合了饿汉和懒汉的优点
创建过程:
- 1.私有化构造方法
- 2.创建内部类,设置静态对象
- 3.创建获取对象的方法
/**
* 单例模式
* 静态内部类式
* @author lzp
* @Date 2020年7月30日
*/
public class SingleTon3 {
//私有化构造方法
private SingleTon3() {
}
//获取对象
public static SingleTon3 getInstance() {
return Holder.singleTon3;
}
//内部类
private static class Holder{
//对象只会创建一次
static SingleTon3 singleTon3 = new SingleTon3();
}
}
本文地址:https://blog.csdn.net/qq_42365534/article/details/107695804