00:00
各位同学大家好,接下来给大家介绍第四组对象的属性修改原子内好,注意对象的属性啊,不是整个对象,所以呢,打开lawyer。我们这儿把这三个归为一类。那么。不言自明,一目了然,大家都会发现他们三个有什么特殊。前面的不用多说了,都见过,都用过,只有后面field update。作为统一的后缀,所以本次这一组以这三个作为典型,作为我们的突破口。那么可以看出。从名字上命名就会清楚是原子整形类的。负的什么意思啊,字段更新,那么所以说剩下的和第一个都差不多,我们搞不懂一个作为突破口,那么全部打开吧,看看是什么意思呢。原子更新对象中int类型字段的值,这是long类型,这是原子更新引用类型字段值,我们说过奥reference,那么可以带个泛型对吧,你传哪个对象都可以,那么所以说他的意思就是。
01:03
你原子更新当中,我只是对某一个F的某个字段来进行更新,好,那么这三个怎么来的,我们再看看我们的API,它官方说明是什么?走起,首先是原子整形,然后是原子整形数组,然后现在又是原子整形的field update那么来吧,基于反射的使用程序可以指定类指定的VE拉,注意规定的类型首先必须要用VE拉修饰,第二个int字段进行什么原子更新诶。它现在已经细化到什么int类型的字段,好,我们再来看看这个和上面一样是long字段进行原子更新,那么最下面大家可以看得出叫什么指定类,指定的V引用型字段进行原子更新,哎,说白了它们是什么更加细力度范围内的原子更新工具内,说穿了有点聚集到富有的,而不再是整个对象了。
02:03
精细化,力度更细,那么来它的目的和这个技术出现以后,和我们之前有什么区别?它给我解决了哪些痛点,牛在什么地方呢?好,那么同学们来看看他的使用目的。来吧。以一种线程安全的方式操作非线程安全对象内的某些字段。好,可以再看一下啊,这句话呢,非常的重要。那怎么来理解这句话呢?注意非线程安全对象内的某些字段,从这三个类的后缀我们也明白了,它只是对F的update感兴趣,其他的不动。回到API,人家也跟你说了类型咱们匹配了以后是字段级别进行原子更新。哦,那么说明白了,它所发生的作用,那就是属于什么?更加细粒度化的以原子方式操纵我们的对象属性,好,那么来吧,各位同学。
03:03
老规矩。Before after,那。在没有这个技术之前,我们来看看以前我们做怎么做的,在有这个技术之后,我们再来看看中间我们有哪些好处,获得了哪哪些加强和帮助,来同学们。我们大家都清楚啊。以前我们假设要对某个类里面的某个字段来进行原子操作,也就是说来避免多线程环境下面。并发不要出问题,解决现场安全的问题,那么我们会干一件什么事?假设这是个银行卡号的类,这就是我们传说中的资源类,现在呢,一旦有这个银行卡号真实业务,那么银行的名字啊,假设你开户银行是中国建设银行,你银行那个卡号打在打印在那个卡号上的数字一般很少变,这个开户人,那么假设张三,那么一般也都不会变,那么这上面这个我们把它俗称为死的信息,而长期经常会变的,那么只有我们的money,比方说你要去提现,你要去转账,你现在又收到了工资卡,这个数字有进有出,那我们为了只要涉及到钱的,一般是不能出错的,不排除你春节。
04:17
高并发多线程环境下面收红包抢红包,当当当当当,一会儿加一会减,有发有进,所以说写的时候你是一定要有这种锁的控制的,对吧,那么这个时候我们会发现这么做没错,但是我们这个锁是锁的整个对象。我们前面介绍过八所种之事吧,那么我们现在呢?思考一个问题,上面是死的数据基本上不会动,动的只有这个money,但是我们为了这个money,我们要把整个对象给锁了,我们思考一下,能不能我们进行字段级别来进行原子更新呢?说白了有点类似于什么。精细化操刀,点穴打击,OK,那么好了,我们现在呢?试想一个问题。
05:03
出事了就你啊,但是为什么要牵连我们其他的呢?那么我们进一步的压缩我们枷锁的范围和空间。好,我们现在呢,引入了一种新的技术叫。M integer field update,那么现在涉及到写操作的我们能不能尝试着降低我们所谓的力度和复杂度,也即我现在呢?不要加synchized。既要又要,还要。保证你数据还是原子操作不出错,进行精细化细粒度的打击原子级别的field的,我们只是更新这个money这个字段来进行原子操作,而不影响整个类,那么所以说各位亲,那么现在我们就要搞清楚,冤有头债有主,以前SYNCH的可能会锁整个对象,而现在我只希望你。给我锁定的仅仅是money这一个字段,OK,那么所以说我们只想对money这个字段。
06:03
进行原子更新啊,尽量的少去打扰其他类,所以说他的这个理念是非常非常舒服的,那么换句话说。我们能不能说人话?杨哥一句话给我讲明白。以前你去医院动手术,不好意思啊,为了减轻患者痛苦,全身麻醉,哎,不管三七二十一,可能你只是口腔上某颗牙有问题,我把你整个人麻翻了。但是现在冤有头债有主,那么现在哪有问题你就给哪打麻醉,从以前的全身麻醉变成了现在的局部微创麻醉,不用加S加锁,OK,那么这个就是它进一步升华更新的理念,非常厉害,来,同学们。所以呢,它这儿就是什么一种线程安全的方式,操纵非线程安全对象,可能整个对象它是非线程安全的,但是对其中的对象内的某一些字段,我们来进行什么原子更新,那么怎么能够达到这样的一种操作效果呢?按照它官网的要求和推荐的实践两个。
07:09
第一个。更新的对象属性必须使用public volatile修饰符,也即待会儿我们的程序就不再是普通的这么一个东东了,然后呢,可能前面要加个前缀public vela,好,这是第一步,第二步,因为对象的属性修改类型的原子类都是什么抽象类,所以每次使用都必须使用静态方法,利用update创建一个东东更新器,哎,有点相当于我们的局部麻醉,我们只是麻醉这么一点点,点穴打击,精准猎杀。并且需要设置想要更新的类和属性,那说白了就是哪有问题改哪一点,小范围局部的修改,而不要全身,那么所以说假设面试官问你,你在哪用过V,前面我们是不是讲过一个double check lock双端检索的单利模式啊,那么这你也可以说啊,我们在使用高并发GUUC编程的时候。
08:05
我用过一个类Tom reference field。或者上面这两个都可以,这三个你说哪个都成,那么这样的话,它是规定了你必须要用public,哎这样去说的话呢,就非常的有含金量,好,那么接下来咱们呢,理论完了以后,手下见真章,编码开始。
我来说两句