2016 - 2024

感恩一路有你

枚举单例模式写法 Java单例模式简单吗?

浏览量:1844 时间:2021-04-08 05:48:16 作者:admin

Java单例模式简单吗?

Java singleton说起来很简单,很多初学者也认为它很简单,但是如果你深入思考,你会发现它不是那么简单。

单实例需要考虑多线程并发访问的问题,这将变得更加复杂。如何保证线程安全?常用的方法是使用DCL(double check lock)单例。实现代码如下:

这里要特别注意。在实例之前,应该添加volatile修饰符。为什么添加此修饰符?这涉及到CPU底层的一些知识。简言之,当CPU底层执行指令时,它会对不同的指令重新排序。java代码中的一行代码可能是CPU底层的多条指令。如果发生重新排序,则在单例对象的实例化过程中,可能会返回处于半初始化状态的对象。那么由当前线程获得的实例与由其他线程获得的完全初始化的对象是不同的。Volatile修饰符可以防止CPU底层对这行代码的相关指令重新排序,直到对象完全初始化,从而确保多个线程访问singleton并返回相同的对象。

因此,看似简单的问题并不简单。

什么是单例模式,最好写一个简单的单例模式的实现,谢谢?

单例模式,即一个类只能有一个实例。无论何时,谁请求,都是同一个实例。

单例模式,每种语言都有自己的实现方式,这里我以Java为例。实现单例的方法有很多。如果您想要最简单和最完美的实现,请参阅以下代码。这是我几天前给朋友解释辛格尔顿时写的。

Java collection framework的作者Joshua Bloch在《有效的Java》一书中推荐了这种写作方式枚举型的单元素已成为实现“单例”的最佳途径。

看起来不简单吗?单例枚举非常简单,可以保证多线程并发访问的安全性,防止序列化和反射。

枚举单例模式写法 Java用枚举实现单例 枚举序列化

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。