设计模式之单例模式–java
单例模式原理:
1.首先单例模式中SingleTon的构造方法和成员对象都是private的,所以只有通过内部的getInstance()方法才可以得到一个实例;
2.其次,单例模式中的成员对象是static的,static修饰的成员对象是类属性的只能够类首次加载时加载一次并且存储在静态存储区域,所以成员变量instance只存在一份。
单例模式的方法有以下几种:
1.懒汉式(第一种):
这种懒汉式,存在线程安全问题,解决办法看懒汉式升级版2.0;
2.懒汉式(第二种)
此种懒汉式虽然解决了线程安全问题,但看起来有些乱,用起来也麻烦,不推荐;
3.饿汉式
此种饿汉式不存在线程安全问题,可以放心使用;
4.内部类
内部类方式感觉有点高大上啊~
5.读写锁
读写锁分为读锁和写锁。多个读锁之间不互斥、读锁和写锁之间互斥、写锁和写锁之间互斥。这一个功能很重要,对并发读取提高了性能,现在我们利用这个性能实现单例模式
这里涉及了锁降级概念,锁降级是说允许从写入锁降级为读取锁,其实现方式是:先获取写入锁,然后获取读取锁,最后释放写入锁。但是,不能从读锁升级到写锁。
说了这么多,你记住了哪个呢?不管哪个会用就好啦,如果为了面试还是多记一点比较好哦!
若有错误,还请大家指正。