00:00
我们来看一下。Notify方法我先写一下啊。这个notify呢,是object o,你有一个object是不是,然后呢,O点什么呢?Notify。表示什么呀,表示。让什么呀,就唤醒正在O对向上等待的线程,唤醒正在O对向上等待的线程。还有还有一个啊,还有一个notify all方法。这个方法是唤醒什么呀?O对,向上等待的,就是处于等待的。所有线程。啊,叫notify o啊,这个叫notify,这叫notify o啊,唤醒所有。
01:07
了解一下啊,了解一下,先把这个方法呢去理解理解啊,知道这个为的方法是对象上的方法,知道这个notify方法是对象上的方法,为的方法是让正在我当前对象上活跃的线程处在等处于等待状态,那Fi方法是让我O对象上正在处于等待的线程,诶,给他唤醒啊,给他唤醒,一个是唤醒,一个是等待啊,一个是唤醒,一个等待。那么接下来我们看看生产者和消费者模式啊,就是什么时候我们需要用到这个位的方法和动力方法。啊,不不不,不能with all with all啊,不能with all啊。不能为他。来。那么这块呢,咱们来看一看这个生产者和消费者模式啊,我们叫带34。叫生产者和消费者模式。
02:03
啊,生产这个消费者模式是什么呢?就是说有可能会有这样的一个需求,或者这样的一个场景,各位啊,大家注意看啊,有可能会有这样一个场景。啊,这是生产者和消费者模式,是专门为了解决某一个特定需求的啊。生产者和消费者模式是为了专门解决某个特定需求的。比较特殊啊,只有这种需求下我们才会用。才会用。那大家思考一下,有没有可能有这种需求?说一个县城啊,他负责生产,一个县城负责消费。就是一个。负责什么呀,生产。一个县城什么呢?负责消费。
03:01
而且还必须得达到生产和消费的均衡。就有这样一个需求。是吧,哎,这是一个负责生产的一个线程。这个呢是一个什么呢?负责这个消费的一个线程。啊。一个县城负责生产,一个县城负责消费,而且最终你还得达到,必须达到什么呀,生产和消费均衡。最终要达到什么呢?生产和消费。必须均衡。例如。生产满了。就不能再继续生产了。必须怎么着啊?
04:00
必须让消费线程进行什么消费?消费完了。就不能再消费了。对吧,哎,必须让什么呀,生产县城进行生产。就这意思。啊,就是说我们生产者和消费者模式是为了专门解决某个特定需求的,什么样的需求,我现在在给你讲,这个需求呢,就一个县城他负责生产,一个县城他负责消费。然后我们还要达到什么呢?生产和消费的一个均衡。就是生产,它不能一直生产,满了就不能再生产了。对吧,消费呢,他也不能一直消费,消费完了你就必须得让他再接着生产了。为了达到生产和消费者均衡。啊。供求关系平衡啊,就这个意思,一个县城负责生产,你看生产一个。
05:04
对吧,哎,又生产一个。对吧,哎,又生产一个。对不对,哎,又生一个满了。满了你再去生产就有问题了,明白吧,这个时候呢,应该是去消费消启动消费,建能去消费它。对吧,这个其实就相当于我们类似于我们现实世界当中的一个仓库嘛。这是一个仓库。对吧,这是一个生产车间,这是个消费车间,这个车间怎么一直生产,一直生产生产生产生产。对吧,然后这个消费呢,负责消费,消费生产和消费必须得均衡。达到供求关系均衡。供求关系平衡,就这意思。啊,那么大家想一想。我们这个时候是为了达到我们的生产和消费均衡,我们是不是就必须得干什么?必须得使用我们的wait方法和notify方法。
06:03
对吧,那么大家思考一下谁去调位的方法,谁去调notify方法。谁调用wait方法?和notify方法。是仓库吧?是不是这个仓库啊,仓库是共享的吧。对吧。仓库这个对象是不是多线程共享?这个假如说是producer。生产者,这是consumer消费者。对吧,那这个是仓库O。对不对,哎,那应该是什么呢?这个注意仓库是多线程什么共享的。啊。所以需要考虑什么仓库的线程安全问题?
07:05
仓库对象最终调用什么wait和什么notify方法?注意啊,仓库这个对象是最终是调用流个位和农电反方法的。那么要注意wait方法和notify方法建立在SYNCH的基础上。Wait方法和notify方法建立在synchronized线程同步的。基础之上。这一点大家注意。仓库呢是多线程共享。所以需要考虑现成的安全问题,因为共享的这个仓库对象你往里边加对吧,诶这叫修改吧,你从里边拿,这是不是也是修改呀。对吧,你会修改这个数据啊,多线程环境有共享数据,并且涉及到修改操作的话,我们必须考虑线程安全问题,对不对。
08:05
而你最终调位的方法和notify方法是谁呢?是一个仓库对象去调位的方法,仓库对象去调什么呀?Notify方法?那么你的wait方法和notify方法是建立在snch ne的线程同步的基础上的,这一点咱们是必须的。不能更改的啊,这点很重要。就是we方法的使用和notify方法使用得建立在什么呀,我们single net建成同步的基础上。啊。那么这个这个图呢,最主要是想跟大家聊一聊,就是我们啊以后的开发可能会有这样的一个需求,什么需求呢?啊,就是说我们一个县城负责生产,一个县城负责消费,为了达到生产者和消费者一个均衡状态,为了有这种需求是吧?而我们就必须得用什么呀,Wait和notify方法,但是we的方法和notify方法呢,它在使用的时候,它必须得怎么着啊,建立在什么。
09:00
哎,建立在我们那个线程同步的基础之上。因为必须得保证线程安全问题才能谈wait和notify。大家需要注意啊,Wait方法,它会让当前线程处于等待状态。并且释放锁。方法重点啊。o.wait方法会让什么呀?正在什么O对象上活动的当前线程?进入等待状态。并且释放。释放啊,并且释放O对象的所。并且释放之前占有的。
10:01
O对象的,这是为的方法,各位。Notify方法只是通知,不会释放锁啊。Notify方法只会通知。啊,不会释放锁。啊,注意这个。嗯。Wait和NOTIFY2个方法有这样的特点,Wait的方法呢是让正在O对象活动的当前前的进入等待状态,并且释放之前占用的O对象的所,而order notify不会只会通知,不会释放之前占用的O对象的所。啊,一个是不会释放,一个是。啊,注意一下啊,Wait notify建立在synchronized的基础之上,建立在这个单词的基之上的。
11:03
因为这是多线程并发共享一个对象,有增加有删除,所以这块呢,我们需要考虑仓库的线程安全问题,所以要用新的。啊,Synchronized,好。我们一起来写一个例子,行吧。呃,那么我们这个以什么案例呢?就模拟一下这个吧,行吧,就生产和消费者均衡行不行。
我来说两句