题目:使用四个线程实现输出ABCD,其中线程1输出A,线程2输出B,线程3输出C,线程4输出D,且要求线程1控制所有线程执行的次数。最终的输出格式为ABCDABCD...(与输入执行次数相关),线程的输出顺序是ABCD
思路:本人小白,紧做汇总,经过激烈讨论,发现有两个方法的思想比较好:
(1)使用消息通知和同步锁机制,线程1输出后通知线程2输出,线程2输出后通知线程3输出,线程3输出通知线程4输出,线程4输出通知线程1,形成一个线程执行环路。
(2)消费者首先通过监控者通知需要A,这时,当线程1符合要求时输出A,通知监控者已输出A,然后消费者依次通知需要BCDA...等
综合比较,两种思路是站在的角色角度不同,(1)是站在生产者角度考虑,生产者掌握控制权,主动提供数据。而(2)是生产者只负责提供数据,具体的掌控由消费者来控制。
所以,分清楚ABCD输出顺序是由谁控制的差别。生产者和消费者,一个负责生产,一个负责消费。
基于两种思路,分别用代码实现,具体代码如下: