这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。
用知识改变命运,让我们的家人过上更好的生活
。
目录
-
-
- 一、生产者和消费者模式描述
-
-
二、存在的问题
-
三、wait()和notify()方法
-
四、生产者和消费者模式中涉及到的类
-
五、代码实现
一、生产者和消费者模式描述
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者从空间里取走数据。
二、存在的问题
-
当生产者比消费者快时,消费者会漏掉一部分数据;
-
当消费者比生产者快时,消费者会取走相同的数据。
解决方式:要考虑线程安全的问题,解决此问题有三种方式
① 同步代码块
② 同步方法
③ lock锁机制, 通过创建Lock对象,采用lock()加锁,unlock()解锁,来保护指定的代码块
此博客采用第二种方式解决了线程安全问题
三、wait()和notify()方法
wait()
、nofity()
这两个方法必须有锁对象调用,而任意对象都可以作为 synchronized 的同步锁,因此这三个方法只能在Object 类中声明 。
-
wait():当缓冲区已满/空时,生产者或消费者线程停止自己的执行,释放锁,使自己处于等待状态,让其它线程执行。
-
notify():当生产者或消费者向缓冲区放入或