温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:02
同学们,我们再来往下继续看,好我们来下继续看。那么懒汉式呢,还有一种写法,就是同步代码块的一种写法,他怎么写的呢?他这样子写的,大家看一下。因为前面我们讲讲一个,它提供了一个线程安全,但是线程安全呢,他把这个同步的机制是放在这个代码块的啊,在放在这个方法这一层的,于是乎有人就说,那干脆我这样写,我这样写怎么写呢,他把这个同步这个机制呢,放在了我们这个代码块这去。放在哪里呢?放在这儿。就说我在去创建这个对象实例的时候,我去进行一个同步。这种写法大家看能不能达到一个线程安全的问题啊。这种写法其实是。没有办法实现这个这个现场安全的,因为它带来的问题跟前面一样,因为你在这进行一个判断的时候。他有可能多个线程已经进来了,所以说你在这加同步,加同步这种写法没有实际的意义,明白吧,所以说这个代码我就不写了。
01:08
就是大家知道在实际开发中有人这么去玩,要怎么去玩,他说诶,那既然我在get instance data加一个同步效率太低,我怎么办呢?我把这个同步的机制放在这个代码块,放在6IN single痛这地方去玩,是不是就可以解决效率问题呢?它这样放到这。他放到这个地方,其实大家可以分析出来没有,他连现场安全这个问题都解决不了。为什么呢?因为。刚才不是讲过吗?因为它只要进到if里面去,它只要进到if这个块里面去,你第一个线程执行完了,第二线程还是要创建一个,因此这种写法就更不靠谱了。只是我告诉大家,有人这么去写,大家要注意这个问题好吧,小息面试官问到我这儿就直接给他说他的问题好吧。这种方式呢,本意就是刚才那个本意,他是想对呃,放在这个代码块进行同步,它的本意是想对第四种实现方法进行改进。
02:07
他为什么要改进,因为他觉得同步方法效率太低,他想把这个同步机制放在哪里呢?放在代码块这一级。但是实际上这种同步并不能起到线程同步的作用,也就它起不到线程安全的解决线程安全的问题,它的问题跟第三种实现方式遇到的情况是一样的,假如一个线程进入到if判断了。还没有来得及往下执行,另外一个线程也通过或者叫也进入了这个if判断语句块,那么也会产生多个实例,因此在这个实际开放中,不是不推荐,而是直接不能用。也就上面这个写法就彻底的错的了。啊,他他直接就一定会存在线程安全的问题啊,前面那个只是效率低,就是第四种写法是效率低,但是这种写法呢,它不是效率低的问题,它是会有可能在多线程的环境产生多个谁,因此这种写法呢,我们就不能用,好吧,这种写法我就不去再去写了,好吗?这是第几种啊第五种写法,第五种写法呢,我就直接给他看,我就不去写了,第五种写法我们是最后结论是不能使用。
03:17
就是同学们在面试或者是在做开发的时候,如果看到有人这么去写,你要告诉他这种写法是有问题的就OK了。好,这种写法我们就先聊到这。
我来说两句