00:00
好,各位同学,我们继续。那完成了。我们。全部三大特性的讲解,那么现在能不能体会到什么叫轻量子呢?注意GMM要求是三个特性,你要同时保证。但是volatile只能保证其中的两个,它是不保证原子性的,所以它是低配版的同步机制。OK,那么接下来我们为了加深印象。再来看看。老师抽取的笔面试题单招。他会问你在哪些地方用到过vela?那么首先最经典的案例就是大家写的单例模式,也叫单子模式啊,那么第二个后续我们讲读写所手写一个缓存的时候也会用到不?第三个我们后面讲。CAS看底层源码分析的时候你会发现。OUC里面的包里面大规模的使用到了,那么好,我们先来说我们的单利模式。
01:05
OK。老规矩。二话不说。那么同学们。丹尼模式怎么写?首先,单利模式共计有六种。好,当然你不用什么,我要掌握六种单利模式,那么坦白讲,我认为掌握了我写的这种足以。但是呢,你要明白。我们去年由于是什么大家在Java一起单入门。学的都是单机版的知识。那么言下之意,大部分情况下,你只面对一个线程,就是内线程。那么那个时候同学们在学丹尼模式入门的时候,一定学过两个经典的案例,一个叫懒汉,一个叫恶汉,同学们没问题吧,那么这个时候呢,我们先搂一眼。为什么?那老师,难道你们以前教的错的?以前不单立模式不挺对的吗?以前教的完全没有任何问题,但前提是那是在单机版下。
02:02
那么下面请看。大连模式应该怎么写啊?什么二话不说,Private?Single DEMO,那么是不是就是个主类,然后干什么呢?Instance?直接就是那没问题吧,这第一步,第二步我只要是单立模式。几份?读一份。重点是什么构造器是不是private,必须是直接干嘛为private呀,构造方法,那么这个时候干什么呢?My current加上这个那么呢。我是构造方法假设。我就这么一干。那。杨哥,你为什么要在第13行写这么一句话呢?待会儿我们去验证。也就是说,假设我只溜出来一份,那么大家告诉我,这句话是不是应该在后面的控制台只会被打印一次?
03:00
如果我被打印出多次,说明我这个程序是有问题啊。那么好,同学们。第一个这个第二个这个第三步干什么呢?最简单,Public static,那么干嘛,Single time get instance,那么我是不是要取这个值啊兄弟们。那么好,那么干嘛呢,如果instance。等于none的话,兄弟们干嘛那么说明instance是不是直径6SINGLE time来这么一份。然后。传出去诶。好,那么同学们,这个是不是大家之前写过的最最最经典的?安利模式。好,那么怎么判断它一个类只有一份呢?那么老师一定给他干过这种事,Get incens等等。那么这个时候同学们请看。Single团长get。Instance刷刷刷三份,如果只有一份的话,我们都懂的,对于引用类型,这货重等等是比较内存地址啊。
04:05
如果这个得到的对象等于这个是错。三个错说明是不是是吧,都一样,可是你你你晓得的,我这样是不是相当于犯了。多次获得啊,那么第二个。这句话应该被打印出几次呢?不仅应该一次啊。大家请看效果。Main线程干了一件事,我是构造方法回答我们这句话是不是只被打过一次啊?错错错,说明他们是不是同一个对象欧啦,这个呢,算是带大大大家简单的复习。换巧,这是大家去年19年以前,去年学的单机版下的。单例模式就这么写。没有错,但是我们讲过,你到杨哥这儿,现在呢,最坑爹的一个问题就是你玩什么单线产,说白了就是大家在培训班学的什么,说白了就是什么卖县成的。
05:03
操作动作,你前面所学的知识没有任何问题,那。坑爹的就是什么呢?现在变成了什么?并发。多线程号情况发生了。很大的。变化,那么什么意思呢?同学们请看。程序还是那个程序,还是熟悉的配方,还是熟悉的味道。但是呢?我现在可就不是。Main线程,一个线程来访问这三行。兄弟们。老师现在干的事儿是几个现场?现在十个线程,我来访问这个方法。你懂的。如果这十个线程的控制啊。也是正确的。你懂的吗?这句话是不是只应该被答。一次啊,但是兄弟们我们来看一眼,那么这块我们做一个分割,上面是may单机版,下面是什么一到十号线程对。
06:07
单利模式的是现在先把这块给住了。同学们,娄现在是不是纯纯的十个线程,咱们不废话,如果你十个线程来访问,你单列模式被控制的好,这句话是不是只应该被打印出一次?那么这个时候同学们请看我点。2654133号线城干了一次,一号线城干了一次。123456,换句话说,在多线程环境下面,同学们马上会发现。这个东东。出问题了。现在他这个单列模式啊,是不是被打印了六次啊。我们再来执行一次。12345。十个现场。单利模式啊,干出了五次绝对违背单利模式了吧,那么所以说这块干嘛。就是我们要解决的问题。非常非常的繁琐,为什么并发Java程序员之前,因为啊,很多情况下,你在并发的情况下面。
07:07
你的困难复杂程度是呈几何倍数上升。我不说别的,那上一次啊是656条,这次是五条,不妨我们再来试试,那又变四条了,你的结果是不不确定的,你要有本事把这些不确定的变成确定的,那么你才是值钱的。那么好怎么解决?那同学们都会说,老师,你这个单列模式啊,干嘛前面写错了。你要加size不就没这事了吗?那么来故意的哈,刚才可是没加。来,同学们,现在我们我们来看。多线程环境下面有没有控制住,控制住了再来一次啊一号线程。再来一次啊,干嘛还是它,因为只要他。这个是不是不为空啊,后面的线程进来直接返回同一个变量,所以说这种情况下OK,但是非常抱歉。
08:01
这种情况下可以解决。还那句话,单机版下面你是OK的,就单机版下面刚才出事了,单机版下面刚才高平那个。没有加出事了,你现在加了以后能不能解决这个问题,可以解决。但是非常抱歉同学们。我为了这么一个单列,我们讲过,那在这加的话,是不是整个代码都锁了。那么我们现在在高并发的环境下面,我们应该写个什么呢?那么所以说这个时候我们将要。给大家介绍。DC模式的单利模式,目前在高并发环境下面,这种方法是比较获得企业推崇和认可的。好,那么呢,我们呢,这一讲就先到这儿,让大家熟悉干嘛再。并发环境下面,以前的单线程可能会出现单立模式,不是一个对象的情况。
我来说两句