线程通信:
不同的线程执行不同的任务,如果这些任务有某种关系,线程之间必须能够通信,协调完成工作。
我们来看一个案例:生产者和消费者案例(producer/consumer)
-
生产者和消费者应该操作共享的资源(实现方式来做);
-
使用一个或多个线程来表示生产者producer;
-
使用一个或多个线程来表示消费者consumer。
为什么生产者不直接把肉包子给消费者,而是先把数据存储到共享资源中,消费者再从共享资源中取出肉包子,再消费呢?
其实这里主要体现了面向对象的设计理念,我们先看一下耦合的两种类别:
-
高(紧)耦合:直接使用生产者把肉包子给消费者,那么生产者中得存在消费者的引用,同理,消费者要消费生产者生产的肉包子,那么消费者中也得存在生产者对象的引用。
-
低(松)耦合:使用一个中间对象,屏蔽了生产者和消费者直接的数据交互。
如果,共享资源中没有肉包子,则生产者负责生产一个肉包子,否则生产者等待消费者消费完肉包子;共享资源中没有肉包子,则消费者等待生产者生产肉包子。