文章目录
本次的学习总结是对Java中的单例设计模式的介绍与解析,对于作为一个开发者而言这个设计模式必须要了解透彻,基本素养吧。
文章目录
前言
如果要详谈Java开发设计模式的内容,那显然是不可能的,因为对于设计模式这一概念在Java开发就高达二十三中设计模式,难点并不是如何去写这些东西,而是要学会在什么情况下去使用它,才是重点,并利用合适的选择来完成业务逻辑的表达。
以下是本篇文章正文内容,下面案例可供参考
一、什么是设计模式?
首先,在学习设计模式之前我们需要先理清一个概念,什么是设计模式?相信有一部分人在一开始就会自信地回答道,设计模式就是一种框架吧?当然这个回答是错误的。所谓设计模式,它并不是框架,也不是一种技术,而是到目前为止,以前的开发者为了实现某一个功能而总结出来的一个好的方法和步骤,这才是我们的设计模式。,而设计模式的难点并不是在于使用它,而是要思考在那种情况下去选择合适的设计模式,寻找正确的应用场景。
二、什么是单例设计模式
回到正题,那么究竟什么单例模式呢,通常的回答是在一个系统项目开发中某一个类只有一个实例存在即为单例模式对象,但是这样的回答也往往是不全面的,单例模式的介绍中其实最重要的一个识别点是在于它没有成员变量的存在。原因很简单,如果对于一个单例模式的对象而言它有了成员变量,而其他方法或类访问它的这些成员变量的时候是会造成线程安全问题的。从而造成系统项目的维护性困难的问题的出现。
三、单例模式的使用注意点
3.1 什么样的类可以被写成单例模式
- 1、这个类没有成员变量的时候就能写成单例
- 2、如果一个类是单例的并且有成员变量那么这个类一定存在线程安全问题。
3.2 什么是线程安全问题
1、当多个线程访问了同一个共享变量的时候将会出现线程安全问题,因为多个线程都有可能对数据进行修改等操作。
若一个类有成员变量但是这个成员变量只涉及到“访问”而不涉及到“修改”那么是否存在线程安全问题?
答:不存在,因为不涉及到对数据的修改操作。
3.2 如何解决有线程安全问题的类
- 1、加锁,通过对线程安全问题进行锁的配置,使得在运行的时候不被多个线程访问到。
- 2、使用线程锁ThreadLocal来维护一个自己的类的对象,让它在行为上不受到其他的线程影响,也就是自己管自己。
四、面试题
问题:一个类是线程不安全的如果将这个类写入方法中是否还存在线程安全问题?
答:不存在线程安全问题,因为方法具有隔离性,每个线程都会维护这个方法的栈帧。
总结
对于本次的文章,也许我对单例模式的介绍有点少,更多的是介绍了单例模式中的线程安全问题,在开发设计中对于设计者而言这些问题千万不要忽视。