生产者消费者模型(同时有多个线程对同一资源进行访问,并进行不同的操作)
这里面一共有三个对象:
1、生产者对象
2、产品对象(资源)
3、消费者对象
无库存模型 要点:
同一时间内只能有一个生产者 ;同一时间内只能有一个消费者;生产者在生产的同时消费者不能消费;消费者消费的时候生产者不能生产。这就要求我们在编码的时候要对相应的生产方法和消费方法进行上锁。
上锁的时候要注意:
1、给两个方法上锁用的锁对象要用同一个锁对象(可以给这两个方法都传递过来同一个产品对象作为锁对象,字符串、类文件也都可以用为锁对象,还可以调用Lock方法)
2、锁的范围不能过大,否则会出现重复
当消费者发现没有产品、或者生产者发现有产品时可以使用调用wait()方法使当前对象的线程释放锁并进入阻塞状态,知道其他线程调用同一锁并调用notify()或者notifyAll()方法为止。
notify():唤醒同一对象锁中调用wait()的第一个线程。
notifyAll():唤醒同一对象中所有调用wait()方法的线程,优先级最高的线程先被唤醒并执行。