线程的通讯

线程的通讯(生产者和消费者)

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

猜你喜欢

转载自www.cnblogs.com/bbbbbbbb1og/p/9747359.html