线程间的通讯对很多初学者来说过于抽象,不好理解。要想搞明白它们之间通讯的机制,最重要的就是先理解线程是什么,它是怎样工作的。
琢磨了好久,想到了一个比较活泼的例子。线程是什么?线程是傻瓜劳动力,四肢发达,没有头脑。要想让它做一些有利于生活的事情,必须得告诉它怎么做。所以有我们程序员写代码,我们写的代码,就是给线程做的指示,线程按照这些指示,一步一步往下走,直到做完为止。
在一个进程里会有很多线程,这些线程作为傻瓜劳动力,可以分享一些劳动资料。最常见的,就是多个线程,同时使用一个队列,有的线程按照指示,往里放东西,有的线程按照指示从里边拿东西。这一放一拿,线程和线程之间就交换了一些信息,从而实现了线程间的通讯。
最为经典的例子,就是两个线程分享同一个队列,一个是扮演生产者角色,一个是消费者角色。生产者执行一段生产代码,往队列里放消息。消费者从里边拿出来,按照消费的算法处理这个消息。