设计模式(4)——单例模式的学习及其六大战将

其实大家看到这个标题还是有点蒙的,六大战将是什么鬼,你怎么不说是四大天王呢,你咋不上天呢。(汗。。)其实六大战将就是六种实现方式了,因为最近在看部网络水文,其中就讲到欧洲第一杀手“皇帝”和他的八大战将,所以就想到了六大战将了,哈哈哈,我真乃人才也。。(还要不要脸。。)

战将一:伯爵(懒汉式-线程不安全)

这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。这种方式 lazy loading(延迟加载) 很明显,不要求线程安全,在多线程不能正常工作。

/**

  • 懒汉式加载-线程不安全

*/

public class SingletonBeanLazyDg {

private SingletonBeanLazyDg(){}

private static SingletonBeanLazyDg singletonBeanLazyDg;

public static SingletonBeanLazyDg getInstance(){

if(singletonBeanLazyDg == null){

singletonBeanLazyDg = new SingletonBeanLazyDg();

}

return singletonBeanLazyDg;

}

public void draw(){

System.out.println(“lazy-singleton-dangerous”);

}

}

战将二:耶稣(懒汉式-线程安全)

这种方式具备很好的 lazy loading(延迟加载),能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。

/**

  • 懒汉式加载-线程安全

*/

public class SingletonBeanLazy {

private SingletonBeanLazy (){}

private static SingletonBeanLazy singletonBeanLazy;

public static synchronized SingletonBeanLazy getInstance(){

if(singletonBeanLazy==null){

singletonBeanLazy = new SingletonBeanLazy();

}

return singletonBeanLazy;

}

public void draw(){

System.out.println(“lazy-singleton”);

}

}

战将三:野兽(饿汉模式)

这种方式没有加锁,执行效率会提高。但是类加载时就初始化,容易产生垃圾对象,浪费内存。 它基于 classloader 机制避免了多线程的同步问题,不过,instance 在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用 getInstance 方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化 instance 显然没有达到 lazy loading (延迟加载)的效果。

/**

  • 饿汉式

*/

public class SingletonBeanHunger {

private SingletonBeanHunger(){}

private static SingletonBeanHunger singletonBeanHunger = new SingletonBeanHunger();

public static SingletonBeanHunger getInstance(){

return singletonBeanHunger;

}

public void draw(){

System.out.println(“hunger-singleton”);

}

}

战将四:鬼影(双检锁/双重校验锁(DCL,即 double-checked locking))

这种方式采用双锁机制,安全且在多线程情况下能保持高性能。

/**

  • 双重校验锁/双检锁

*/

public class SingletonBeanDCL {

private SingletonBeanDCL(){}

private static volatile SingletonBeanDCL singletonBeanDCL;

public static SingletonBeanDCL getInstance(){

if(singletonBeanDCL==null){

synchronized (SingletonBeanDCL.class){

if (singletonBeanDCL == null){

singletonBeanDCL = new SingletonBeanDCL();

}

}

}

return singletonBeanDCL;

}

public void draw(){

System.out.println(“DCL-singleton”);

}

}

战将五:金童(登记式/静态内部类)

这种方式能达到双检锁方式一样的功效,但实现更简单。对静态域使用延迟初始化,应使用这种方式而不是双检锁方式。这种方式只适用于静态域的情况,双检锁方式可在实例域需要延迟初始化时使用。

/**

  • 登记式/静态内部类

*/

public class SingletonBeanStatic {

private SingletonBeanStatic(){}

private static class SingletonBeanHolder{

private static final SingletonBeanStatic SINGLETON_BEAN_STATIC = new SingletonBeanStatic();

}

public static final SingletonBeanStatic getInstance(){

return SingletonBeanHolder.SINGLETON_BEAN_STATIC;

}

public void draw(){

System.out.println(“登记式/静态内部类”);

}

}

战将六:玉女(枚举)

虽然没被广泛应用,但是这是实现单例模式的最佳方法。它更简洁,自动支持序列化机制,绝对防止多次实例化。 这种方式是 Effective Java 作者 Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还自动支持序列化机制,防止反序列化重新创建新的对象,绝对防止多次实例化。

/**

  • 枚举

*/

public enum SingletonBeanEnum {

INSTANCE;

public void draw(){

System.out.println(“枚举式单例”);

}

最后

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述

NSTANCE;

public void draw(){

System.out.println(“枚举式单例”);

}

最后

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-F0ql9EsK-1714799962767)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 迪兰的RX580战将BIOS是电脑显卡的一个重要组成部分,也是用于管理显卡的系统。BIOS是一种只读存储器芯片,里面包含了显卡的最基本信息,比如无法更改的显卡型号、显存容量、核心频率等。同时,它还包含了显卡的驱动程序、图形处理单元程序等关键信息。如果BIOS出了问题,有可能导致显卡崩溃、无法完全显示图像等问题。 而迪兰的RX580战将BIOS相对于其他的BIOS来说更具优势。它可以针对相应的操作系统进行个性化的调整,使得显卡的性能更好,游戏运行更流畅。此外,战将BIOS还拥有更多的调整选项,可以更加灵活地优化显卡,满足不同用户的需求。 总之,迪兰的RX580战将BIOS可以为用户带来更好的显卡体验。如果需要优化显卡性能,可以根据自己的需求下载BIOS刷入显卡中。但是在操作时需要谨慎,避免出现不必要的错误。最好先备份原始BIOS再进行BIOS更新操作,以免出现不可逆转的情况。 ### 回答2: 迪兰RX580战将 BIOS 是指用于控制AMD Radeon RX 580显卡的BIOS固件程序,以实现对显卡的识别、调整和管理,提高显卡的性能和稳定性。 迪兰RX580战将 BIOS 包含了一系列参数,例如GPU频率、显存大小、显存时序等,可以通过修改这些参数来实现超频、刷BIOS等操作。同时,BIOS中的风扇控制和电源管理等设置也可以影响显卡的工作温度和功耗,进而影响性能和稳定性。 在使用时,需要特别注意BIOS版本和更新历史,谨慎选择BIOS进行升级和修改,以免造成不可逆的硬件损坏或系统不稳定。建议在进行重要操作时备份原始BIOS,以备不时之需。 总之,迪兰RX580战将 BIOS 对于显卡使用者来说是非常重要的系统软件,必须谨慎操作和维护。 ### 回答3: 迪兰RX580战将BIOS是一种可以重写显卡基本输入输出系统(BIOS)的工具,它可以改变显卡的时钟频率,电压和功率限制等参数,以增加显卡的性能。该BIOS使用了先进的CoolTech风扇技术和6相供电系统,提供了更好的散热性能和电源稳定性,以满足高性能游戏和计算需求。 使用迪兰RX580战将BIOS需要一定的技术和经验,如果修改不当可能会导致系统不稳定和显卡故障,因此需要在确保安全的情况下进行操作。此外,修改BIOS也有可能违反了一些厂商的保修条款,用户需要自行承担风险。 总之,迪兰RX580战将BIOS是一种可以增强显卡性能的高级工具,但需要用户拥有一定的技能和知识来使用它。在使用之前应该仔细评估其风险和收益,确保操作正确和安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值