00:00
同学们,我们继续上一讲,我们给大家演示并验证了object类当中的wait很多方法实现现成的等待唤醒通知它需要的两个细节和条件。那么。首先,Wait和notify。必须要跟synchize组队,这一波OK吧,否则就不合法的monitor state exception。第二个从顺序而言,一定是什么,先阻塞了,然后再有人去唤醒,如果两个反了,那么就不OK了好吗?所以说呢,我们呢?第一所sized wait和notify。这两个细致。这两个细节,这两个限制要求,请大家务必记在心里面,好,那么继续,我们呢,看看下一组。我们呢,先把这个提出来吧。的好吧,那们。胃疼。方法,长一点就长一点,那么方便大家复习好,这是我们的第一组。
01:02
搞定,那接下来呢,我们呢,就来看看我们的。第二组condition接口当中的wait和signal方法实现现成的等待和唤醒通知。那么看看它的。特点和我们的wait和notify是不是有异曲同工之妙?好,那么同学们不废话,直接上来,那么sta lock lock等于new。Rein look这一波没什么问题吧?那么static condition condition等于。洛克点6CONDITION,那么这个呢,是大家非常熟悉的东西,不介绍,那么第一组和刚才一样,还是我们的。直接线程拿过来,只不过以前是叫SNCH的,现在呢,我们就不是了,那么我们是不是我们的。洛克。这一波同学们没有任何问题吧,和刚才一样,那是不是也是?
02:00
我们的这个线程。Come in。那么在这块是不是我们的A线程进来了,进来完了以后我们一般会干一件什么事?是不是我们的condition点?喂,它,那么你看连异常是不是都是。一样的呀,这一波同学们没问题吧,好,那么异常完了以后和刚才一样啊,这个呢,我就偷个懒了啊,同学们呢,就。也知道多多包涵,这个呢,我们就过来了,被唤醒,OK,这是我们的什么A线程那么一样。在没有方法里面,我们接下来另外一个线程是不是我们的B线程,那B线程的话呢,我们呢,把这一块呢,也直接。好吧,那么它的这个B线程里面呢。非常的简单。也就这这这么一句话,那么B发出通知对吧,那么他这儿的话呢,也是我们的什么condition.signal这一波OK吧,那么所以说呢,我们现在呢,就干一件事就是。
03:05
A线程B线程A先启动了以后进来了,那么wait是不是停在这儿被阻塞了,然后等着B来唤醒,好程序很简单,我们呢,跑一下。来,同学们,A进来了,B唤通知,发出通知,Signal a被唤醒,很和谐。那么和刚才的判断和验证一回事。那么同学们。注掉我们的洛。安洛克最好是成双成对的匹配啊,说过了,那么大家请看一下。还O不OK?Wait和signal,那么来,同学们,我们一跑。出现什么鬼,是不是还是跟刚才。的情况,还是熟悉的配方,还是熟的味道,这两个在这两行,28行和43行,那么同学们请看28行和我们这的什么43行是不是都报了一样的这个错误,不合法的莫塔state exception不废话,OK吧,所以说也得到一个结论,Wait和signal和刚才我们的wait诺地方一样,也必须要跟我们的洛克安洛克组队狼狈为奸才能一块混下去,OK吧,好。
04:16
这是第一个知识点,那么第二个知识点呢,我相信不用我废话了吧,那么我们先让B先signal发出通知啊,但是这个A呢,和。刚才一样,那么我们等个三秒钟,然后再跑,那么来先看看啊,我们呢,行不行?那么来同学们发出通知了吧,三秒钟以后大家请看AB。没有下文了,A确实触发确实进来了,但是告诉我。这句话是第34行,这句话大家请看被唤醒这句话是不是迟迟没有打印出来啊?为什么A线程没有人通知我,我永远在这儿awake了,没人管我,我只能在这傻傻的等待,OK,这个灯现在可没灭,那么这样。
05:04
和我们前面讲的是一回事,那么所以说从这个层面而言,同学们这两个。三角形是不是一套的,只是API不有不一样,不同底层机制是一样的,所以说得,所以说我们讲到这儿就会明白。传统的wait notify wait和signal,那么他们呢?实现等待唤醒通知呢,都会有两个约束,那就是线程先要获得并持有锁,必须在锁块,也就是我们SNCH和lock当中要有这个前提。第二个必须要先。等待后唤醒线程才能够被顺利的唤醒,OK,顺序不能错,好,那么同学们。接下来。我就是没讲,你也应该猜出来,那么现在杨哥的安排能理解了吧?什么叫before?什么叫after?你学习方法上既要复习老知识,底子基础要好,又要明白新知识,那么用了lock support以后。
06:10
你们认为还会不会有这两个条件的限制了呢?OK,好,那么同学们,我们下一讲。给大家说support。
我来说两句