泡泡中文

最新网址:www.paowxw.com
字:
关灯护眼
泡泡中文 > 蓝星文娱:从微末崛起的娱乐大亨 > 第八章(核心基础篇-2)2024年Java求职面试与工作编程要点实录

第八章(核心基础篇-2)2024年Java求职面试与工作编程要点实录

下面我会介绍六种常见的实现方法:

1)饿汉式(静态常量)

这是最简单,且线程安全的实现方式。

在类加载时,就完成了初始化,所以类加载较慢,但获取对象的速度快。

public class Sion {

//类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快

private statial Sion INSTANCE = new Sion();

private Sion(){}

public statigletoInstance(){

return INSTANCE;

}

}

2)懒汉式(线程不安全)

这种实现,在第一次调用getInstance()方法时,初始化实例,实现了延迟加载。

但是,在多线程的环境下,这是不安全的。

public class Sion {

private statigleton instance;

private Sion(){}

public statigletoInstance(){

if (instance == null){

instance = new Sion();

}

return instance;

}

}

3)懒汉式(线程安全,同步方法)

通过synized关键字,对getInstance()方法进行同步,保证线程安全。

但是,效率较低,每次获取实例都需要进行同步。

public class Sion {

private statigleton instance;

private Sion(){}

public statiized SioInstance(){

if (instance == null){

instance = new Sion();

}

return instance;

}

}

4)懒汉式(线程安全,双重检查锁定)

这种方式,既实现了延迟加载,又保证了多线程环境下的线程安全。

同时,由于使用了双重检查锁定,减少了不必要的同步开销,因此效率较高。

public class Sion {

private volatile statigleton instance;

private Sion(){}

public statigletoInstance(){

if (instance == null){

synized (Sion.class){

if (instance == null){

instance = new Sion();

}

}

}

return instance;

}

}

5)静态内部类

这种方式,同样实现了延迟加载和线程安全,而且只需要编写很少的代码。

它是单例模式中的最佳实现方式之一。

public class Sion {

private static class SionHolder {

private statial Sion INSTANCE = new Sion();

}

private Sion (){}

public statial SioInstance(){

return SionHolder.INSTANCE;

}

}

6)枚举

这种实现方式,不仅能避免多线程同步问题。

而且在Java中,枚举类型是一种特殊的类,它包含了一组固定的常量。

由于Java枚举类型的特性,它可以自然地实现单例模式。

枚举类型的每个实例,在JVM中都是唯一的。

因此,利用枚举类型来实现单例模式,是非常简单且线程安全的。

下面是一个使用枚举,实现单例模式的示例代码:

publium Sion {

INSTANCE;

//这里可以添加其他方法或者字段

public void someMethod(){

//实现单例对象需要的功能

}

//获取单例对象的方法

public statigletoInstance(){

return INSTANCE;

}

}

在这个示例中,我们定义了一个名为Sion的枚举类型,它有一个枚举常量INSTANCE。

由于枚举常量在JVM中是唯一的,因此INSTANCE就是我们的单例对象。

我们还提供了一个静态方法getInstance()来获取单例对象。

这个方法直接返回枚举常量INSTANCE,非常简单。

你可以像下面这样,使用这个单例对象:

public class Main {

public statiain(String[] args){

Sion sion = SioInstance();

sion.someMethod();

}

}

使用枚举实现单例模式的好处是:

(1)线程安全

由于JVM保证枚举类型的实例,在内存中唯一,因此无需额外的同步措施。

(2)防止反序列化重新创建对象

由于枚举类型,默认实现了serializable接口。

并且每个枚举常量,在反序列化时,都会映射到对应的枚举类型。

因此,不会重新创建新的对象。

(3)防止通过反射攻击

Java的枚举类型,在反射机制下,也是安全的。

使得无法通过反射,来创建新的枚举实例。

因此,使用枚举实现单例模式,是一种既简洁又安全的方式。

总结:

以上六种实现的单例模式的方法,你可以根据自己的需求和使用场景,选择你认为最合适的单例模式实现方式。

……

以上,就是今天的分享啦!

希望,对你有那么一点点、一丢丢、一戳戳地帮助哈~

所以哩…

评论、收藏、关注一键三连可好?

推荐票、月票、打赏,好伐?!

嘻嘻…

『加入书签,方便阅读』
热门推荐
模拟:身为无上巨头,托起人族半岛:我真是偶像星辰求生风暴之身1999华娱教父快去找你白月光吧半岛:唯一星热芭:你们都是来抢我老公的都市之罗小黑传奇涤凡尘
网站地图