线程通信:

不同的线程执行不同的任务,如果这些任务有某种关系,线程之间必须能够通信,协调完成工作。

我们来看一个案例:生产者和消费者案例(producer/consumer)

  1. 生产者和消费者应该操作共享的资源(实现方式来做);

  2. 使用一个或多个线程来表示生产者producer;

  3. 使用一个或多个线程来表示消费者consumer。

Java核心类库,线程通信

生产者和消费者案例示意图

为什么生产者不直接把肉包子给消费者,而是先把数据存储到共享资源中,消费者再从共享资源中取出肉包子,再消费呢?

其实这里主要体现了面向对象的设计理念,我们先看一下耦合的两种类别:

  1. 高(紧)耦合:直接使用生产者把肉包子给消费者,那么生产者中得存在消费者的引用,同理,消费者要消费生产者生产的肉包子,那么消费者中也得存在生产者对象的引用。

  2. 低(松)耦合:使用一个中间对象,屏蔽了生产者和消费者直接的数据交互。

Java核心类库,线程通信

两种耦合方式的代码

如果,共享资源中没有肉包子,则生产者负责生产一个肉包子,否则生产者等待消费者消费完肉包子;共享资源中没有肉包子,则消费者等待生产者生产肉包子。

Java核心类库,线程通信

相关文章:

  • 2021-09-11
  • 2021-09-14
  • 2021-09-11
  • 2021-09-17
  • 2022-03-10
  • 2021-12-26
  • 2022-03-07
  • 2022-12-23
猜你喜欢
  • 2021-09-14
  • 2021-12-07
  • 2021-04-21
  • 2021-07-25
  • 2021-12-16
  • 2021-08-14
  • 2021-11-21
相关资源
相似解决方案