生产者消费者模式:不同种类的线程间针对同一个资源的操作
问题:
A:如果消费者先抢到cpu的执行权,就会去消费数据,但是现在的数据是默认值,没有意义,应该等着数据有意义,再消费
B:如果生产者先抢到cpu的执行权,就会去产生数据,但是,他产生完数据后,还继续拥有执行权,他继续产生数据。应该等着消费者把数据消费掉,然后再生产。
正常思路:
A: 生产者
先看是否有数据,有就等待,没有就生产,生产完之后通知消费者消费
B:消费者
先看是否有数据,有就消费,没有就等待,通知生产者生产数据
使用等待唤醒机制,wait(), notify(), notifyAll()方法来实现
这些方法是Object类的方法,方法的调用必须通过锁对象调用,锁对象可以是任意对象,所以等待唤醒机制的相关方法定义在Object类中。
代码实现如下:
public class Student {
private String name;
private int age;
private boolean flag;
public synchronized void set(String name,int age){
//有数据,就等待
if(this.flag){
try {
this.wait();
} catch (InterruptedExcep