单例设计模式
思考:通过手写代码的方式实现单例模式
为了回答问题,首先解释什么是单例模式,然后基于高并发的情况,优化单例设计模式。
一、单例模式
单例模式指的是有且仅有一个实例化对象,这是单例设计模式的本质,基于这个本质,再看看单例设计模式的关键点在哪里。
为了实现单例设计模式,那么,对象的实例化就不能暴露出去,根据面向对象思想,就需要封装起来,只能由类的内部访问,而外部只能通过类暴露出去的全局方法进行访问,获取对象实例。构造方式私有化,是单例设计模式实现的关键。
虽然单例设计模式进行了构造方法私有化,但是需要考虑一个问题,那就是对象的实例化应该在什么时候完成,是系统进行初始化的时候,还是对象被第一次调用的时候。根据这样的思考,单例设计模式又分为饿汉式和懒汉式。
饿汉式指的是系统初始化时,就进行对象实例化。懒汉式指的是对象被第一次访问时进行实例化。
为了练习手写代码的方式,使用 Java 语言编写单例设计模式,下面提供了饿汉式和懒汉式的手写代码的图片,仅供参考。
饿汉式
懒汉式
二、多线程高并发
对于饿汉式而言,由于系统初始化的过程便进行了对象实例化,不会因为系统运行期间调用而产生新的对象。而对于懒汉式而言,对象实例化只有在被访问的时候才能实例化,那么,当多线程并发的情况下,线程抢占资源,导致同时产生了多个实例化对象,为此,需要进行安全处理。为了简化理解,这里针对实例化对象部分进行了同步处理,避免产生新的对象。实际上,这里可以加上各种不同的锁,保证对象新生成时的安全,不会产生多个对象。
懒汉式同步代码块处理
评论