00:00
各位同学大家好,接下来我们从轻松的乐观锁和悲观所开始给大家进行讲解和介绍,那么从易到难,从浅入深,层层推进,给大家说清楚全部的锁。那么讲到这儿,呃,我默认为大家呢是有Java多线程的。基础知识和guc的。入门知识篇的,也就是说对乐观锁和悲观锁的概念应该不陌生,那就是你不了解Java,起码你用过数据库吧,对吧?也应该了解什么是乐观锁和悲观所,那么在这我们依旧呢,不能免俗,为了知识的全面性,还是给大家做一下简单的说明和介绍,我们分别是什么,用在哪?好,所谓的悲观所第一个。我们日常使用的size的这个。和我们的洛克字段,那么这个洛克就是GC初级知识里面说过啊,那么他们的实现类都是一种悲观,所所谓悲观锁什么意思呢?就是我的想法。行为很悲观,我认为自己在使用数据的时候,一定有别的线程来跟我争抢,有别的线程来跟我竞争。那么。
01:04
我在修改数据的时候,我不希望别人来跟我抢,我很悲观,认为我在修改的时候,别人就会来和我争抢。那么为了保证数据的安全和一致性,我怎么做呢?一不做二不休,此时此刻,Only one就加上snchize或者落考。保证同一时间点有且仅有一个线程能访问这个资源,那么这样的话确保数据不会被别的线程修改,这个呢就是悲观所的思想,那么它一般用在哪呢?适合什么写操作多的场景,因为写的话我们要更新或者是什么提交我们的数据进我们的数据库或最终。我们的媒介数据媒介,那么这个时候我们为了保证数据的一致和安全性,先加锁保证写操作,因为此时只有一个人写嘛,就不会写乱了,所以说呢,它一定是显示的锁定之后。再操作同步资源,那么一句话,我给他的定义是男性锁,OK,比较重,比较狠,加上以后我没有完成。
02:02
别人不许抢,保证数据一致性好,这是悲观锁,那么相反的乐观锁,我是要加锁,那么乐观锁呢?那么自然而然,他呢。加的锁呢?是这样的,认为自己在使用数据的时候,不会有别的线程来修改数据或这个资源,所以不会加锁。我很天真,很乐观,显得人间美好对吧,处处充满爱,所以说在Java当中是通过无锁编程来实现的,只是在更新数据的时候去判断一下,那么在我之前有没有别的线程更新过这个数据,如果没有更新过,我取的时候是这个回去的时候。几乎没变样,那么我们认为此时此刻我读对了,我在修改的同时,没有人没有别的线程来捷足先登,所以我可以将自己的修改成功写入。但是反过来,如果这个数据已经被其他线程更新了,那么我们没办法,别人已经先提交我手头上的数据,那么只能是什么?要么放弃修改,要么重试强索等等一系列操作。那么乐观所的判断和他的算法以及他的思想是什么呢?
03:09
有两种,一个叫version版本号,一个叫cns,好。先说版本号,那么在取数据的时候,我取出来的时候,我的版本号是一,我修改回去以后默认。要加一次版本号从一变成二,也即如果按照这样的提交规则,只要有人提交了版本号,都会第一一次递增。加个一,那么现在我取的时候是一,回去以后版本号还是一,那么我会把版本号变为二,而且我的版本号比目前系统上所有的要新,那么说明什么?在我之前没有人提交过,没有别的线程捷足先登,也就是我很乐观的实现了,不会有别的线程来修改这个数据,OK,但是非常抱歉,我准备回去我取的时候。
04:00
是一,我提交了以后,一加一,我要准备写,把二版本号写回去,但是突然发现这个版本号已经变成八了,那说明什么?在我之前有很多线程来修改过这个数据了,那么我手头上的这份修改可能需要重新处理,所以说这个就是版本号机制。那么还有CS算法,那么这个呢,我们先混个眼熟,到后面第八章的时候,我们会给大家介绍原子操作类以及相关的底层设计思想,就是CS啊,那么一句话就是CS比较并交换,通过自旋来实现。好这个我们放在后面,请大家先混个眼熟即可。好那么对于我们的乐观锁,那么它用在哪呢?第一个适合什么?独操作多的场景OK,不加锁的特点能够使其独操作的性能大幅提升,那么我们是无锁编程,不加锁的并发性是不是绝对要比加锁提高啊?当然我们呢,安全性和并发性。安全和性能天生就是一堆矛盾,那么这个时候乐观锁它的并发性加强,安全性有点下降,那么乐观锁呢,是直接去操作同步资源,是一种什么无锁算法,哎,不加锁们安全性肯定会下降,但是并发度会提高,它呢?
05:10
得之我幸不得我命,我呢抢得到最好,抢不到我可以再试一次,我们后面的CS会说再努力就是,所以说呢,我给他一句话呢,他是有点佛系,OK,那么他的一般实现,那么主要是版本。Version版本号控制机制和CAS比较并交换的算法,好,那么我们呢,可以看一下我们的伪代码,那么这些都很简单,我们就不再编写那么显示的声明snchized或者的lock,那么这个呢,就是我们的什么背观锁,我认为别人一定会来动用之前先加锁,那么这个呢,原子操作整形类,我们呢,保证多个线程使用的是同一个,这个时候大家请看我没有加锁,那么我不加锁怎么保证它的原子性呢?那么底层用的是按C类和我们的CS算法,这个我们后面聊,所以说大家请看悲观和乐观,那么就是两种截然不同的。好,那么各位亲,那么悲观和乐观就给大家介绍到这。
我来说两句