饿汉模式 懒汉模式

饿汉模式如下图:
JAVA设计模式(单例模式中的懒汉模式与饿汉模式详解)

 

在饿汉模式中,初始化变量的时候最好加上final关键字,这样更为严谨。
而懒汉模式则有以下两种:
1.不加锁
JAVA设计模式(单例模式中的懒汉模式与饿汉模式详解)

 

2.加锁
JAVA设计模式(单例模式中的懒汉模式与饿汉模式详解)

 

看完也许会奇怪,为何要加锁?一般来说大多数情况不加锁并没有任何问题,但是在多线程并发执行的时候就很容易出现安全隐患,第一个线程在判断newInstance==null时,还没有new出实例时,第二个线程也进来,判断的newInstance也是null,然后也会new出实例,这就不是我们想要的单例模式了,所以就需要加锁,使用synchronized关键字,加锁更能解决安全问题,但加锁同时也会出现一个问题,那就是每次都需要判断锁,这样性能就会降低,所以为了提高性能,我们应该尽量减少锁判断的次数,加上双重判断,也就是上图代码,个人推荐选择饿汉模式,直白点就是简单,安全。JAVA设计模式(单例模式中的懒汉模式与饿汉模式详解)JAVA设计模式(单例模式中的懒汉模式与饿汉模式详解)
原文地址:https://www.cnblogs.com/kaffeetrinken/p/8508935.html