首先看一下里面线程间的通信问题:
一个线程向数据存储空间添加数据(生产者),另一个线程从数据存储空间去出数据(消费者)。
这个程序中有两个可能出现的问题需要考虑:
1、 假设生产者线程刚向数据存储空间添加了一个食品的名字,还没有加入这个食品的属性,CPU就切换到了消费者线程,消费者线程将把这个食品的名字和这个人的属性联系在一起。
2、 消费者拿东西都希望自己拿到的是最新的,即生产者刚生产出,消费者就拿走,而不是拿一些陈旧的。可能出现消费者拿不了最新的在程序中的原因,生产者放了若干次的数据,消费者才开始取数据,或者是,消费者取完一个数据后,还没等到生产者放入新的数据,即消费者比生产者快时,又重复取出这个数据
下面我们看一下具体的代码,来体验一下生产者与消费者的关系,平我们去吃麦当劳时,总会要点吃的喝的,比如我们吃个汉堡喝个咖啡,而且这些都要是最新的,都是他们现做的。
第一个问题已经解决啦,但第二个问题还是存在,这个问题我们可以用线程的等待唤醒机制即wait(),notify()方法来解决
Wait()告诉当前线程放弃监视器并进入睡眠状态,直到其他线程进入同一监视器并调用notify()为止
Notify()唤醒同一对象监视器中调用wait()的第一线程