线程的通讯
2021-05-17 06:27
标签:个数 唤醒 object类 必须 共享 思路 read 传递 存在 ? 生产者和消费者模式的思路: 线程的通讯 标签:个数 唤醒 object类 必须 共享 思路 read 传递 存在 原文地址:https://www.cnblogs.com/bbbbbbbb1og/p/9747359.html线程的通讯(生产者和消费者)
A:生产者 先看是否有数据,有就等待;没有就生产,生产完以后通知消费者来消费数据
B:消费者 先看是否有数据,有就消费;没有就等待,通知生产者生产数据
? 线程的通讯需要注意的地方:
生产者和消费者表示不同的线程
1.生产者和消费者操作的必须是同一个数据
实现: 在外界把这个数据创建出来,通过构造方法传递给其他的类。
2.由于生产者和消费者操作了同一个数据,因此会出现线程安全问题,我们需要将操作共享数据的多条语句加锁
实现:生产者和消费者都需要加锁,而且生产者和消费者加的锁必须是同一把
3.生产者和消费者必须存在有 生产后立即消费 的关系
实现:通过Java提供的等待唤醒机制解决( wait() 和 notify()、notifyAll())
? wait和notify方法要注意的事项:
1.wait方法与notify方法是属于object对象的
2.wait方法与notify方法必须要在同步代码块或者是同步函数中才能使用
3.wait方法与notify方法必须要由锁对象调用
? 为什么这些方法定义在Object类中而不定义在Thread类中 ?
这些方法的调用必须通过锁对象调用,由于锁对象可以是任意对象,所以这些方法必须定义在Object类中。