00:00
好,各位同学,接下来给大家说一下偏向所从获取持有撤销总体流程步骤的一个总结,我们以一张图来给大家呢进行详细的讲解和说明,那么在这儿请允许我啰嗦一两句啊,耽误大家一点点时间,那么首先这张图呢,我取材于搜索引擎上面。从这获得的,那么理工科本着尊重原创,尊重知识产权,我说一下我的素材引用的出处,呃,我并不知道这个原作者是哪一位,如果有幸看到,那么请联系,我愿意向你购买,请你吃饭,交个朋友,OK,好,那么下面我们呢,站在巨人的肩膀上,再次感谢这位作者给我们带来了这样一张图文并茂,精彩满满的一张图,我们呢,借鉴。这张图给大家全面的总结梳理一下我们的偏向所的获得和持有,它的变更条件和情况,好,那么同学们请跟着我来,首先。
01:02
我们的状态是无所,然后再到偏向所,然后再撤销偏向所,完了以后自学。之后看情况要不要升级为我们的重量级锁,OK,好,总体流程是这样,那么大家请看,首先是无锁状态,那么锁的标志位和是否偏向锁,那么就是我们的001,那么也是我们这儿的001 OK,来了,现场访问同步方法。目前锁的状态,无锁,如果是无锁,Yes,太好了,那么检查马二的对象头当中是否存储线程ID,那么一开始是无锁,那这个里面肯定是个难嘛,对吧,这些都是个难,那所以说过了。检查是否存着呢,没有存着是个那不是那么所以说CS操作替换现场ID乘高,那么执行这个方法OK,那么好加锁成功,从无锁到获得并持有偏向锁同一个线程,那么第二次又来了。
02:00
现在呢?就不再是无锁状态,是检查ma是否存储着我们的现场ID,比方说我们的a yes就是它,那么还是A获得偏向锁加中的现场ID,执行自己,然后呢,执行方法,那么此时我们的这个偏向锁的标记是不是就应该修改为我们这的101,你们也就是这儿的是吗?101OK,好,那么同学们这个呢?岁月静好,Only one只有一个线程在这转,那么从无所到偏向所的获得和持有以及执行就是这个流程。好,那么下面。岁月静好是偶然,江湖纷争是必然,对吧?有别的人过来竞争了,那么假设A现在在里面执行方法。B线程要过来抢了,不再是一个变俩了,那么检查里面是不是存着B的存储线程,那不是啊,不是怎么办?CS操作我想去替换,那么这个时候如果B替换成功,那么好说,但是如果替换失败呢?那么注意就要开始什么撤销偏向所,那么从一个线程到什么两个线程,那么是不是我们说过有竞争就会发生偏向所的撤销过程,那么这个时候我们过来。
03:13
接下呢?原有偏向所的线程会到达一个安全点,就是这一段没有代码在执行,发生了stop the world,好,那么检查持有偏向图线程的状态,那么这一段也就是刚才我们上一讲给大家讲解的这张图,OK,好,那么我们继续一块块的对下来,那么他要干一些什么事呢?那这个时候来看看,检查原持有偏向组的线程状态,就是原来那个A是已经执行完了。退出了同步块还是正在执行方法之,那么现在B在外面,想进来,就要看看这个A,假设这个A它已经退出。同步代码块已经执行完了,那么原持有偏向组的线程就示范恢复线程运行,那么唤醒这个线程,然后呢,他在走上面这个流程,这个好说,那么也就是什么竞争不激烈可能A假设。
04:11
彻底走了,那么只不过从A换成B,可能还是个偏向索。但是。大部分情况。A在执行方法中,我还没执行完呢,你B就过来敲门,我还在卫生间里面。外面有人来催我了,那么这个时候不好意思啊,竞争开始加固了,那么就要把当前的偏向锁升级,为什么轻量级锁?OK,那么原持有偏向锁的线程获得的所就变成了轻量极所,那么从安全点这它继续要去执行,那么外面的这个B这个线程,那么自然而然还是在做这个CAS操作,那么如果这个CS操作成功了,那么获取这样锁执行同步代码,如果失败了,那么不好意思啊,在外面继续自学,那么这个就是变成我们的什么自选锁,那么这个时候这个自学就牵扯到后面,我们要讲解到他自学的条件,还有次数,他不总不可能一直在外面自学,对吧?那么自学到一定次数了以后,那么继续升级,才会从我们的轻量级变成我们的重量级,OK,好,那么同学们,那么讲到这,这个就是我们的什么。
05:19
从无所到我们的偏向所持有撤销相关的一个流程和所标志位的变更和修改,OK,好,那么这块就给大家呢先介绍到这儿。
我来说两句