00:00
好,同学们,我们继续通过上面的讲解,我们已经明白了奥Tom integer field update,它如何使用,也清楚了什么叫局部微创小手术对吧?哎,只对某一个F的,只对某一个字段进行细粒度化的不加锁的原子操作,完成我们的原子更新。那接下来这个类的用法和道理我们明白了,但它有个局限性,只针对谁int类型对吧?那么大家请看指定VE in特类型的字段进行原子更新,那假设不是in特类型呢?别的类型我想更新怎么办呢?也想进行这样系列对话的微创操作,所以说我们来看另外一个。深度的案例。Reference field update2个说明什么指定引用的字段进行原子更新,那么当然它的适用度肯定要比这个,只能是这个类型更广一些。好,那么下面。我们来看我们的第二个案例,这个该如何使用?来吧,看看我们的诉求,多线程并发调用一个类的初始化方法,如果没有被初始化过,将执行初始化工作,注意多个线程进行饱和式初始化,谁先到谁就先初始化,但是要求只能被初始化一次,只有一个线程操作成功,哪个线程先抢到就是谁的,其他线程的那就。
01:23
不再去做重复操作,OK,有点类似于大家早上去办公室啊,进入到大厅以后,哪一位同事啊最先。到的位同同事一定会把办公室的大灯给大家打开,对吧,但是其他后来的同事看到办公室的大厅的大灯已经打开了,也就不再会去初始化了,那么就是先到先得,只干几次啊一次啊,好,那么同学们我们来看一下这个案例啊,那么class,我们这呢,依旧写一个资源类,那么这个呢。嗯,也就是我们的资源类吧。来。
02:00
OK,那么他呢,和刚才一样,Public volatile对吧,那么现在呢,我们呢。嗯,是布尔型的。来,那么这个布尔行就是is the in被初始化了吗?是否被初始化?初始化过了吗?那么刚开始。我们默认。我们呢?First OK,这是我们的第一步,我们强调过吗?对象的更新属性必须使用public v,那么现在我们就拿刚才所说的引用的字段,我们这次的字段已经换了,换成一个布尔型好,那么下一步我们干嘛呢?那么奥托米克。然后呢,我们找一下我们的update。那么哦,抱歉不是他了啊,那么现在呢,我们应该选的是不是reference找一下啊。嗯。Field update这一波没问题吧,那么这个就是什么带原子引用的更新字段,那么丢进去谁呢?它要有两个,第一个叫麦,第二个就是我们的这个不玩行,OK,那么来了。
03:11
有它了,以后我们来吧。引用版的f update塔,那么和刚才一样,我们都晓得尽量不要去六了,用这个类呢,直接点6UPDATE塔,我们大家请看几个参数啊,三个OK,来更新一下,那么来吧,哪个嘞,卖V2.classok,然后是哪一个。布尔行的点class,然后呢,我们是哪一个字段,我们同学们,我们这是不是is in是否被初始化过,其实和之前我们所讲的还是一样,OK,好了,那完了以后呢,那么。Public。我们呢,Avoid unit来初始化,那么现在我们传的呢,是对这个变量的值来进行我们相关的初始化工作,好了,那么接下来我们应该怎么怎么办呢?那么就是我们的reference的field update来吧,Come。
04:10
Compare and set,也就是我们的什么CS啊,那么针对于这个对象布尔值什么,我们到最后的更新值来,这些呢,都是以前的基础知识,那么来吧,我们就希望呢。是我们的麦这个对象,我们现在呢,希望它呢,没人动过,对吧,还没有人来初始化,那么如果没有人来初始化,哪一个线程先进来,我是不是先完成首次的初始化,那么我初始化完成了,那么自然而然我是不是将其改成我们的这个处啊,没问题吧,那么如果是是处了,那么同学们好说进来成功拿到,那么。接下来我应该干个什么事呢?他获得的。那么就是我们的。Start开始初始化,那么比如说啊。
05:00
那么呢,就是need three second。那么也就是说这个初始化完成我们模拟啊,大概呢,这个工作呢,需要完成了以后呢,需要初始化的时间呢,是三秒钟或者两秒钟吧,省的呢太多了,那么现在呢,这个时候是不是我们的这儿的。结束了我们的初始化操作,这一波弟兄们没有任何问题吧?好,那这个是if抢到成功了,这个就是CS啊,如果做成功了,你进来给我如果C啊。不OK的话,那说明什么,已经有人。做完了,OK,我们在这儿啊,我并没有去用那个Y啊,我们只是做一次啊,五个里面谁先到谁就把它完成,一开始肯定是什么for,只要是first,你做完了你就把它。强到了你就把它改成错,然后呢,完成你的初始化工作,那么其他这些呢,不好意思,已经有人在做了。那么这个时候我们来看一下,转过来这些人就不再写了,那么干嘛呢?那就是。
06:01
已经有现成。在进行初始化工作,OK,那么相当于说你就抢不到了,好了么,下面呢,这个呢,就是我们针对于他来进行的一个。操作,那么来。要我们的。资源类。好和之前的一样,那假设啊,我们现在呢,就少一点,就五个线程,反正先到先得先到的来调用这个方法,那么来吧,我们资源类线程操纵资源类。In my VR,好,那么同学们请看是否能够按照这样的方法来达到我们对这个布尔值进行细度化的F的级别的监控和原子操作呢?来,同学们搂一眼。看后台运行的效果。大家请看二号线程start。这个初始化真的抢到了,他呢,需要两秒钟完成,那么其他的5413,不好意思啊,已经有线程在进行初始化工作,所以说他们的比较并交换这个操作是失败的,OK,所以说他们first进到这一句话,已经有二号员工去开灯了,你们这四个不劳你们大驾。
07:17
拜拜,OK,所以说二号完了以后结束工作,那么来再来一次,下次呢,大家请看谁是一号抢到了这个。初始化的这个工作,那么一号做其他线程呢,干嘛也就不插手了,所以说这个就也就是通过我们的引用类型的field update,没有通过S加锁。细粒度化的来进行我们的什么微创手术,好,那么这两个案例请同学们务必下来练习一下,还是在日常的工作中是有用的,尤其这个初始化系统的这样的一些参数和构建,对吧?好,那么各位同学,我们对于这两个案例就给大家介绍到这儿。
我来说两句