本文小编为大家详细介绍“Java单例创建方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例创建方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。定义单例设计模式,就是采取一定的方法保证在
本文小编为大家详细介绍“Java单例创建方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例创建方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)
代码
public class Singleton1 { // 私有化构造方法 private Singleton1(){} // 静态常量 private static final Singleton1 singleton1 = new Singleton1(); // 对外提供公共方法 public static Singleton1 getSingleton1(){ return singleton1; }}
分析
优势:简单,避免多线程的同步问题
劣势:无懒加载,内存浪费
代码
public class Singleton2 { // 私有化构造方法 private Singleton2(){} private static final Singleton2 singleton2; // 静态代码块 static { singleton2 = new Singleton2(); } // 对外提供公共方法 public static Singleton2 getSingleton2(){ return singleton2; }}
分析
优势:简单,避免多线程的同步问题
劣势:无懒加载,内存浪费
代码
public class Singleton3 { // 私有化构造方法 private Singleton3(){} // 内部属性 private static Singleton3 singleton3; // 对外提供公共方法 public static Singleton3 getSingletons(){ if(singleton3 == null){ singleton3 = new Singleton3(); } return singleton3; }}
分析
优势:起到了懒加载的效果 不会造成内存浪费
劣势:线程不安全 不推荐这种方式的
代码
public class Singleton4 { // 私有化构造方法 private Singleton4(){} // 内部属性 private static Singleton4 singleton4; // 对外提供公共方法 public static synchronized Singleton4 getSingleton4(){ if(singleton4 == null){ singleton4 = new Singleton4(); } return singleton4; }}
分析
优势:解决了线程安全问题,
劣势:效率太低
代码
public class Singleton5 { // 私有化构造方法 private Singleton5(){} // 内部属性 private static Singleton5 singleton5; // 对外提供公共方法 public static Singleton5 getSingleton5(){ if (singleton5 == null){ synchronized (Singleton5.class){ singleton5 = new Singleton5(); } } return singleton5; }}
分析
优势:起到了懒加载的效果 不会造成内存浪费
劣势:线程不安全 不推荐这种方式的
代码
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; }}
分析
实现了懒加载,效率很高,解决了线程安全
代码
public class Singleton7 { // 私有化构造方法 private Singleton7(){} // 内部类 private static class SingleInstance{ public static final Singleton7 singleton7 = new Singleton7(); } // 对外提供公共方法 public static Singleton7 getSingleton7(){ return SingleInstance.singleton7; }}
分析
代码
定义单例对象
public class Singleton { public void hello(){ System.out.println("hello"); }}
定义枚举实例化单例对象
enum Singleton8 { // 相当于public static final Singleton8 INSTANCE; // 保证了枚举实例只能被实例化一次 INSTANCE; // 定义单例变量 private Singleton singleton; // 枚举构造方法,该构造方法是private,执行构造方法的时候,同时创建我们的单例对象 Singleton8() { singleton = new Singleton(); } // 对外提供公共方法 public Singleton getSingleton() { return singleton; }}
使用方法Singleton8.INSTANCE.getSingleton()即可获取我们的单例对象了
分析
简单,避免了线程安全问题
实际开发中推荐使用的
读到这里,这篇“Java单例创建方式有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。
--结束END--
本文标题: Java单例创建方式有哪些
本文链接: https://www.lsjlt.com/news/322354.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0