您的位置:首页 > 新闻 > 热点要闻 > 免费开源电商系统_施工企业工程施工科目_推广营销策划方案_查询网站流量的网址

免费开源电商系统_施工企业工程施工科目_推广营销策划方案_查询网站流量的网址

2025/5/13 20:33:40 来源:https://blog.csdn.net/m0_64637029/article/details/145662267  浏览:    关键词:免费开源电商系统_施工企业工程施工科目_推广营销策划方案_查询网站流量的网址
免费开源电商系统_施工企业工程施工科目_推广营销策划方案_查询网站流量的网址

亲爱的朋友们,大家好!

今天是 CSDN博客之星 投票的开始日!非常感谢你们在过去的时间里给予我无私的支持和鼓励,这一路走来,正是因为有你们的帮助,我才能不断进步,走得更远。

目前,投票已正式开启(2月14日到2月20日,一共七天,每天都可以投),如果你们愿意支持我,可以通过以下链接给67号进行投票:

点击这里投票

CleanShot 2025-02-14 at 23.01.42@2x

我非常珍惜你们的每一份支持,这对我意义重大,也将是我不断前进的动力!如果你们能为我投上宝贵的一票,我会更加努力,继续为大家带来更多有价值的技术分享。另外,这是我半年时间自研的 Java 框架 Sunrays-Framework

Sunrays-Framework官方文档

如果有兴趣,欢迎随时取用!

再次感谢大家的支持与鼓励,期待我们一起成长!


文章目录

    • 1.单例模式饿汉式(静态变量)
    • 2.单例模式饿汉式(静态代码块)
    • 3.单例模式懒汉式(线程不安全)
    • 4.单例模式懒汉式(同步方法)
    • 5.单例模式饿汉式(同步代码块,线程不安全)
    • 6.单例模式懒汉式(双检锁)
    • 7.单例模式懒汉式(静态内部类)
    • 8.单例模式饿汉式(枚举实现)
    • 9.总结

1.单例模式饿汉式(静态变量)

package com.sunxiansheng.design_pattern.singleton;/*** Description: 单例模式饿汉式(静态变量)** @Author sun* @Create 2025/1/17 15:12* @Version 1.0*/
public class TypeA {public static void main(String[] args) {Singleton singletonA = Singleton.getInstance();Singleton singletonB = Singleton.getInstance();System.out.println(singletonA == singletonB);}
}class Singleton {/*** 构造器私有化*/private Singleton() {}/*** 静态变量*/private static final Singleton INSTANCE = new Singleton();/*** 暴露单例对象** @return*/public static Singleton getInstance() {return INSTANCE;}
}

2.单例模式饿汉式(静态代码块)

package com.sunxiansheng.design_pattern.singleton.TypeB;/*** Description: 单例模式饿汉式(静态代码块)** @Author sun* @Create 2025/1/17 15:15* @Version 1.0*/
public class TypeB {public static void main(String[] args) {Singleton singletonA = Singleton.getInstance();Singleton singletonB = Singleton.getInstance();System.out.println(singletonB == singletonB);}
}class Singleton {/*** 构造器私有化*/private Singleton() {}/*** 静态单例对象声明*/private static Singleton INSTANCE;/*** 静态代码块初始化单例对象*/static {INSTANCE = new Singleton();}/*** 向外暴露单例对象** @return*/public static Singleton getInstance() {return INSTANCE;}
}

3.单例模式懒汉式(线程不安全)

package com.sunxiansheng.design_pattern.singleton.TypeC;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;/*** Description: 单例模式懒汉式(线程不安全)** @Author sun* @Create 2025/1/17 15:22* @Version 1.0*/
public class TypeC {
}class Singleton {/*** 构造器私有化*/private Singleton() {}/*** 静态变量*/private static Singleton INSTANCE;/*** 对外暴露单例对象** @return*/public static Singleton getInstance() {// 只有当静态变量为空的时候才赋值if (INSTANCE == null) {INSTANCE = new Singleton();}return INSTANCE;}
}

4.单例模式懒汉式(同步方法)

package com.sunxiansheng.design_pattern.singleton.TypeD;/*** Description: 单例模式懒汉式(同步方法)** @Author sun* @Create 2025/1/17 15:36* @Version 1.0*/
public class TypeD {
}class Singleton {/*** 构造器私有化*/private Singleton() {}/*** 静态属性*/private static Singleton INSTANCE;/*** 同步方法,保证线程安全** @return*/public synchronized static Singleton getInstance() {if (INSTANCE == null) {INSTANCE = new Singleton();}return INSTANCE;}
}

5.单例模式饿汉式(同步代码块,线程不安全)

package com.sunxiansheng.design_pattern.singleton.TypeE;/*** Description: 单例模式饿汉式(同步代码块,线程不安全)** @Author sun* @Create 2025/1/22 15:15* @Version 1.0*/
public class TypeE {}class Singleton {/*** 构造器私有化*/private Singleton() {}/*** 静态变量*/private static Singleton singleton;/*** 向外暴露单例对象** @return*/public static Singleton getInstance() {if (singleton == null) {// 使用一个同步代码块来解决synchronized (Singleton.class) {singleton = new Singleton();}}return singleton;}
}

6.单例模式懒汉式(双检锁)

package com.sunxiansheng.design_pattern.singleton.TypeF;/*** Description: 单例模式懒汉式(双检锁)** @Author sun* @Create 2025/1/22 15:25* @Version 1.0*/
public class TypeF {
}class Singleton {/*** 构造器私有化*/private Singleton() {}/*** 静态变量,volatile保证可见性*/private static volatile Singleton instance;/*** 向外暴露单例对象** @return*/public static Singleton getInstance() {// 1.判空if (instance == null) {// 2.加锁synchronized (Singleton.class) {// 3.再判空if (instance == null) {instance = new Singleton();}}}return instance;}
}

7.单例模式懒汉式(静态内部类)

package com.sunxiansheng.design_pattern.singleton.TypeG;/*** Description: 单例模式懒汉式(静态内部类)** @Author sun* @Create 2025/1/22 15:35* @Version 1.0*/
public class TypeG {
}class Singleton {/*** 构造器私有化*/private Singleton() {}/*** 静态内部类,里面有一个静态常量*/private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}/*** 暴露方法,加载静态内部类,并获取对象** @return*/public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}

8.单例模式饿汉式(枚举实现)

package com.sunxiansheng.design_pattern.singleton.TypeH;/*** Description: 单例模式饿汉式(枚举实现)** @Author sun* @Create 2025/1/22 15:42* @Version 1.0*/
public class TypeH {
}enum Singleton {/*** 天生的单例对象*/SINGLETON(1, "sun");private int age;private String name;/*** 构造器默认是私有化的** @param age* @param name*/Singleton(int age, String name) {this.age = age;this.name = name;}
}

9.总结

单例模式共有八种,其中包含几种典型错误!

第一种是通过静态变量来实现,也就是利用了类只加载一次的特性去完成的。

第二种是通过静态代码块来实现对静态变量的赋值,本质跟第一种没有区别。

第三种是想要实现一个懒汉式,就直接判断变量不为空的时候再赋值,但是会有线程安全问题。

第四种是为了保证线程安全,就采用了同步方法,这样虽然可以解决问题,但是锁的粒度太大。

第五种是为了降低锁的粒度,想要使用同步代码块加在创建实例的部分,但是是没用的,因为可以有多个线程同时判断变量为空,从而进来创建对象,这样做只能保证按照顺序的创建对象,并不能保证不会多次创建对象。

第六种就是既可以降低锁的粒度又可以保证线程安全的双检锁,采用判空,加锁,再判空的方式来完成单例对象的创建。

第七种是静态内部类的方式,就是编写一个静态内部类,持有着静态常量,类加载并不会加载静态内部类,所以外部类在需要的时候去拿这个单例对象即可。

第八种是枚举实现,枚举可以说是最佳的单例实现方式,只要只创建一个枚举对象,那么就是单例的了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com