当前位置:   article > 正文

单例模式的实现方式有哪两种?_//方式1: public static synchronized lazyone getinsta

//方式1: public static synchronized lazyone getinstance1() if(instance == nu

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点来获取该实例。在 Java 中,实现单例模式有两种常见的方式:

1.懒汉式单例

懒汉式单例在首次请求时才创建实例,如果实例已经存在,则返回现有实例。

这种方式的优点是节省了资源,因为只有在需要时才会创建对象。但是,需要注意多线程并发访问的情况,需要进行额外的同步控制以确保只创建一个实例

  1. public class LazySingleton {
  2. private static LazySingleton instance;
  3. private LazySingleton() {
  4. // 私有构造方法
  5. }
  6. //getInstance() 方法使用了 synchronized 关键字来确保线程安全,但这会带来性能开销
  7. public static synchronized LazySingleton getInstance() {
  8. if (instance == null) {
  9. instance = new LazySingleton();
  10. }
  11. return instance;
  12. }
  13. }

2.饿汉式单例

饿汉式单例在类加载时就创建实例,因此不存在多线程并发访问的问题。这种方式的缺点是如果该实例很大或者在应用程序启动时就不需要,会浪费资源

  1. //不需要额外的同步控制,因为实例在类加载时就已经创建,不存在竞争条件
  2. public class EagerSingleton {
  3. private static final EagerSingleton instance = new EagerSingleton();
  4. private EagerSingleton() {
  5. // 私有构造方法
  6. }
  7. public static EagerSingleton getInstance() {
  8. return instance;
  9. }
  10. }

总结:

如果希望延迟实例化并考虑多线程安全性,用懒汉式单例,

如果希望简单明了且不担心资源浪费,用饿汉式单例

另外,还可以考虑使用双重检查锁定等方式来改进懒汉式单例的性能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/157635
推荐阅读
  

闽ICP备14008679号