温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
好,同学们,接下来第二个问题,各种锁的优缺点,所升级和实现的原理来吧。一张表,给他陈述各种所的优缺点,相关的对比。咱们挨个看。首先偏向锁,加锁和解锁。不需要额外的摊销,这个是它的最大的优点,执行非同步方法相比仅存在纳秒级的差距,那么缺点就是线程间存在着所的竞争,会带来额外的什么偏向所撤销的消耗,注意适用场景几个一个线程的时候访问同步代码块。从偏向所升级到轻量所,那么线程的进优点进程的线程不会阻塞,提高了程序的响应速度,因为说白了他还是尽量的不要去阻塞,用CS嘛,那么缺点如果始终得不到所竞争的线程,那么就是CS啊。一直就这么自旋对吧,会消耗CPU,那么来使用场景,追求响应时间同步快,执行速度非常快的,那几乎就是交替执行了,那么这就是轻量锁,那么重量锁不用自学也不消耗CPU了。
01:12
线程阻塞,缺点是响应时间慢,那么你适用的场景是追求吞吐量、同步块执行速度,可以忍受较长时间的OK,这个就是他们三种所的优缺点和对比,以及适用场景。那么总结一句话就是。没有锁最好,然后你要加锁呢,咱们也就是一个线程先偏向只有一个尽量的加锁和解锁,不需要额外的消耗,实在不行了,CS自学,再不行了,再捅到阻塞过,OK,所以说实际上就是把之前的背关锁重量解锁,也就是变成在一定条件下使用偏向锁。即使用新量级所自学的一种形式,OK好了,那么下面呢,这个呢,在修饰方法就是S方法和think同步块上面自加码的实现方式上是有差异的,但是内部实现还是基于对象头的马word来搞定的,加VA6之前的S使用的是什么重量所哎,直接就同到重量锁了。
02:12
那么六之后进行优化,那么顺序就是这个二,那么六了之后就说明什么,不是说什么情况都要使用重量极锁啊,不到那个程程度不到那个层次啊,不要什么都往上投来。那么。这块我们就会明白偏向所适用于单线程,那么在不存在所竞争的时候进入同步方法和代码块就是。更多的使用偏向锁比较好嘛,轻量锁呢?适用于竞争较不激烈的情况,有点类似的乐观锁,在存在竞争的时候,它会升级为轻量级锁,那么轻量级所采用的是什么?自学,如果这个同步块实行时间很短的话啊,轻量级锁呢?虽然会占用CPU的资源,但是相比使用重量极锁还是更高效,对吧?那么也就是我们前面所说的那一堆,那么使最后重量极所使用于竞争激烈的情况。
03:05
如果这个时间很长,那么。CS啊,自旋带来的性能消耗就会比重量级锁更严重,那么这个时候干脆你也别在外面不停的自旋了,直接升级为重量级锁好吧?那么言而总之就是一句话,逐个升级,最后该用什么情况再用什么样的锁,对吧?好比你打扑克牌斗地主,你也不会一上来就是。四个二两个玩就出来吧,OK,那么好,给他一个逐步升级的过程,好,那么同学们对于我们的所升级小总结就给大家介绍到这儿。
我来说两句