/**
* 饿汉式(静态常量)
* 优势:简单,避免多线程的同步问题
* 劣势:无懒加载,内存浪费
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton1 {
// 私有化构造方法
private Singleton1(){}
// 静态常量
private static final Singleton1 singleton1 = new Singleton1();
// 对外提供公共方法
public static Singleton1 getSingleton1(){
return singleton1;
}
}
/**
* 饿汉式(静态代码块)
* 优势:简单,避免多线程的同步问题
* 劣势:无懒加载,内存浪费
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton2 {
// 私有化构造方法
private Singleton2(){}
private static final Singleton2 singleton2;
// 静态代码块
static {
singleton2 = new Singleton2();
}
// 对外提供公共方法
public static Singleton2 getSingleton2(){
return singleton2;
}
}
/**
* 懒汉式(线程不安全)
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton3 {
// 私有化构造方法
private Singleton3(){}
// 内部属性
private static Singleton3 singleton3;
// 对外提供公共方法
public static Singleton3 getSingletons(){
if(singleton3 == null){
singleton3 = new Singleton3();
}
return singleton3;
}
}
/**
* 懒汉式(同步方法)
* 优势:解决了线程同步问题
* 劣势:使用synchronized同步关键字,性能太低
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton4 {
// 私有化构造方法
private Singleton4(){}
// 内部属性
private static Singleton4 singleton4;
// 对外提供公共方法
public static synchronized Singleton4 getSingleton4(){
if(singleton4 == null){
singleton4 = new Singleton4();
}
return singleton4;
}
}
/**
* 懒汉式(同步代码块)
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton5 {
// 私有化构造方法
private Singleton5(){}
// 内部属性
private static Singleton5 singleton5;
// 对外提供公共方法
public static Singleton5 getSingleton5(){
if (singleton5 == null){
synchronized (Singleton5.class){
singleton5 = new Singleton5();
}
}
return singleton5;
}
}
/**
* 双重检查锁机制
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton6 {
// 私有化构造方法
private Singleton6(){}
// 内部属性
private volatile static Singleton6 singleton6;
// 对外提供公共方法
public static Singleton6 getSingleton6(){
if (singleton6 == null){
synchronized (Singleton6.class){
if(singleton6 == null){
singleton6 = new Singleton6();
}
}
}
return singleton6;
}
}
/**
* 静态内部类
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton7 {
// 私有化构造方法
private Singleton7(){}
// 内部类
private static class SingleInstance{
public static final Singleton7 singleton7 = new Singleton7();
}
// 对外提供公共方法
public static Singleton7 getSingleton7(){
return SingleInstance.singleton7;
}
}
/**
* @desc:
* @author:liyajie
* @createTime:2022/2/11 10:25
* @version:1.0
*/
public class Singleton {
public void hello(){
System.out.println("hello");
}
}
/**
* 枚举方式
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
enum Singleton8 {
// 相当于public static final Singleton8 INSTANCE;
// 保证了枚举实例只能被实例化一次
INSTANCE;
// 定义单例变量
private Singleton singleton;
// 枚举构造方法,该构造方法是private,执行构造方法的时候,同时创建我们的单例对象
Singleton8() {
singleton = new Singleton();
}
// 对外提供公共方法
public Singleton getSingleton() {
return singleton;
}
}
Singleton8.INSTANCE.getSingleton()即可获取我们的单例对象了。
站在用户的角度思考问题,与客户深入沟通,找到湖滨网站设计与湖滨网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、主机域名、雅安服务器托管、企业邮箱。业务覆盖湖滨地区。
单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象, 使用单例模式可以提高系统性能。
当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new。
单例模式推荐使用的方法有内部静态类方式和枚举方式。
网站栏目:不是我看不起你?我猜你只知道两种单例模式
文章转载:http://www.gawzjz.com/qtweb/news43/178343.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联