00:03
十个对吧,然后呢,生产十个消费十个是不是啊生产。三个,那就消费三个呗。对吧,就是生产和消费还是均衡的啊,生产和消费均衡就行了,那我们这个程序的原理,我觉得大家再得好好再看一下啊,它是怎么个执行办法,它它怎么就这样写就行了呢?来我们再去研究一下各位啊,我们来捋捋好吧,来这是一个仓库list的集合,然后呢,我们用这个线程把这个list传进去了,这个list也传进去了,那两个线程共享同一个仓库,T1和T2线程命名T1和T2启动,启动的话总有一个先一个后,这是肯定是没问题的,对不对。肯定是有一个先有一个后先抢到CP实验片的,那么假如说假如假如说我们这个生产线程先抢到CCPU时间片,这个时候我们的集合是不是里边元素是没有的,对吧?没有的这是零啊各位。
01:09
元素没有的话,上来上来我们先把这个对象的锁先占住了,占住之后呢,接下来就开始执行啊。对吧,哎,执行执行这块代码实际上是你了个对象嘛,List加了一个元素,加了元素输出了,输出之后呢,list.notify all唤醒了。对吧,哎,唤醒了唤醒,实际上这个代码执行结束了,各位啊,有同学老师,那这个唤醒是不是会把它唤醒,唤醒会唤醒它,唤醒它也没关系。没关系啊,然后整个这个大括号代码执行结束之后呢,哎,他肯定会把历史集合之前占的锁就释放掉了,释放掉之后呢,另外一个线程,它有机就有机会去执行这个代码了。但有没有可能就是说他这哥们儿把锁释放了,释放之后怎么着啊,释放了之后呢,接下来他又去抢这个锁的时候,他又抢到了,有没有可能抢到没关系,抢到之后他立马就S大于零了吗。
02:00
大于零之后呢,马上就wait了,听懂了吗?Wait时候呢,它会释放这个锁,那这个时候100%可以保证另外一个线程就执行了,它占用这把锁之后呢,由于上面这个条件wait的时候,这个就不可能wait,那么这个时候它就会执行,那么执行删除这个元素,删除这个元素之后呢,接下来怎么着啊,我们输出对吧?输出之后呢,再往下notify notify all的时候,它会唤醒这个,也会唤醒这个,没关系。没关系,都唤醒之后呢,接下来这个大罐里边就执行结束了,再去抢夺实验片,它有可能再抢到,如果抢到也没关系,抢到它等于零啊,等于零它就wait了呀。是不是是没有没有任何问题的啊,那他如果唤醒的话,他在这会执行啊。他就接着往下执行了,听懂了吧。他接着往下执行,创建个对象放到list集合当中,他就输出,输出之后呢,他就唤醒,唤醒所有的话都就唤醒了,都唤醒也无所谓,唤醒其中哪个都没关系,因为有条件进行控制。有条件进行控制,就看谁先占住锁,你就算你先你唤醒了他,他又把锁占住了,占住也没关系,你往下走,这个条件会成立,成立的话你还会怎么着啊?
03:12
哎,等待等待的话怎么着。啊,你还是会把这个锁释放掉啊,那另外一个线程是不是就有机会了。啊,什么意思啊?如果不使用notify会怎样?你不使用到的Y就有可能僵持住了呀。不可能再抢到吧,这样会变成负数不是呀,老师以后。这种业务多吗?这种业务不多,不多,但是得了解一下。不用幻想全部的话就有序有序了吧。就生产十个,消费十个。跟跟唤醒所有跟跟这个没关系,跟这个没关系啊。
04:02
如果抢到就会变成负数了,啥意思?就同学们就是还是没太理解是吧,我我再说一下啊,来我再说一下,各位听我说听我说啊,都别说话,都别说话,我来说你们先听。行不行,静下心来,咱听一下啊来。我list集合传进去,两线程启动总有一个先一个后,假如说这次不是他先,是他先了各位啊,消费先了,消费先的话,那我问大家一个问题,上来synchronized锁住,锁住之后它这个list size等于零,是不是条件成立,上来就wait。是不是就wait了对吧?行,那是这种情况啊,假如说还是这哥们儿先先抢先抢到了。假如还是这哥们先抢到,假如最开始啊,T1T21执行,还是这个生产线先抢到,抢到之后绿色集合是空的,各位啊,大于零吗?
05:06
它不大于零,它不大于零怎么办呀,各位,它不大于零啊,因为它是它是它是零嘛,它就会去生产,是不是生产放进去之后呢,接下来我们输出,然后去唤醒。唤醒所有,那么这个程序就执行结束了。他生产了一个集合,里边放了一个元素,执行结束之后呢,你所有的线程都在活跃,但是这个时候要抢CCPU时间片,有没有可能他再抢到,有这个可能。但也有可能他抢到啊。是吧,假如说他抢到了,他抢到有没有关系,他抢到list集合size是不是大于零,因为你刚才往里边放了一个呀。那它大于零的话,它就wait了呀,他会在这里停下来,并且会释放我们这个对象上的锁吧。是不是他停到这释放对象上的锁,那么这个时候程序是不是就有机会执行了。
06:01
当你这个wait的前提下,这个条件肯定是不成立的,那么就会走这啊。当他走到这儿之后呢,接下来就会输出啊,输出之后呢,他就会notify notify all也没关系,唤醒所有的话,抢到CCPU,假如说他这哥们再抢到,抢到也没关系,抢到的话,这个条件不就成立了吗。成立之后它再往下走不就wait了吗?Wait之后它释放锁对吧。那你这个就可能往下走了,因为你这个条件成立的情况下,这个条件不成立,这个条件不成立就会走下边儿吗。行了,我这个呢,就说这么多吧,各位啊,我也不再解释了,你在下去之后想一想,为什么程序这样写,它就可以达到生产和消费者这个平衡,行吧,哎。行,那到这儿为止吧,咱们这个县城这块的一个内容就结束了,各位啊,就结束了。行,休息一下啊,休息15分钟。
我来说两句