00:00
各位,懒汉式的第一种写法不安全,一是我们来写懒汉式的第一种,第二种写法,前面讲的这个懒汉式的写法呢,它存在一个线程安全问题。那问题刚才已经分析出来了,主要是在执行这个get instance的时候呢,有可能造成。多条多个线程去进行一个判断,是不是?于是乎我们来对这个方案进行一个改进,我们在哪里加一段,加一段同步代码。在这我们。在这一个获取到实例的地方就是get instance里面我们加一段同步代码,加一个synchronized。解决线程不安全的问题,为什么呢?因为当有一个线程在执行get instance的时候,我们怎么办呢?诶,我们就不让别的线程去执行这个get instance,那这样子你的线程呢,就在这排队,就不会造成多个线程同时去执行我们这个get特因式方法,于是这个问题就解决了,解决什么问题呢?解决了线程安全问题对吧?但是你这样虽然解决了线程安全问题。
01:12
那它又带来新的问题了。那新的问题是什么?我们先把这个实现了再来分析。好吧,来,我们学习这个懒汉式的第二种写法,来,同学们跟上我的思路。好的,那我们写个TYPE4没问题对不对,好,我把这个代码呢,先粘贴复制一份,我们就在这上面改好吧,这是我们第四种写法。第四种写法,那第四种写法呢,我们在这儿。改一下名称。原先是零三,现在变成零四即可。好,那我们怎么改进哈,来我们这儿写一个,这是。这是我们的懒汉式的第二种写法,解决一个线程安全问题,怎么解决呢?
02:03
是这样子的,我们在这里加入一个关键字。Synchronized。那这样子。它仍然是个懒汉式,那我们怎么解决呢?提供一个方法还是一个静态的公有方法,加入了加入了这个同步。同步处理的代码。代码,那这样就解决了什么呢?解决了一个线程。就是线程安全问题。线程安全问题,就是说不会再造成说你有多个线程同时来执行get instance这个方法。从而破坏我们单利模式,这个确实可以是解决的,那么我们来执行一下,看代码OK还是不OK,好吧,这是懒汉,是二线程呢,就变安全了,而且同学们可以看到我们这个同步的机制是放在哪里呢?我们是放在这一个这个方法这一层的,对不对?好,我们运行一下。
03:01
运行。我们运行过后,我们发现呢,它仍然是线程安是处,而且仍然是哈code一样,所以说它是满足单例模单例设计模式的。那这个写法。它虽然解决了线程安全问题,但是又带来新的问题了,什么问题呢?来各位朋友给大家分析一把,来看这里。就是说我们懒汉式的第二种写法呢,它的确解决了现成。这个不安全的问题,就是这个现在变得安全了,变得安全了,但是效率太低了。大家看为什么效率低啊,因为你在这个执行过程中,你这个get instance这个这个这个行为肯定是经常发生的。也就是说你会,呃,你你会经常去调这个get instance方法。那每个线程在获取类的实例时,都要执行get instance方法,都要进行这个同步。这个没有必要啊,其实我们这个方法只执行一次实例化代码就够了。
04:03
但是后面你要获取这个类的实例呢,你直接返回就OK,但是你因为在get方法加了一个同步,那每一次。你再去调用时都要进行同步,这个效率就变低,明白吧,所以说方法进行同步效率太低了。最后我们这个结论,在实际开发中这个方法。它虽然可用,但是我不推荐,不推荐就是因为效率太低。好,这个就是我们懒汉式的第二种写法,它的特点是解决线程安全,但是效率太低。还是不推荐使用,明白好,那就是我们懒汉式的第二种写法,就给大家介绍到这里。
我来说两句