Input 里的 if(!r.flag) 和 Output里if(r.flag)
这两个语句是对同一个flag进行判断,所以不管r.flag是true或false,都能保证一个if()判断为true,从而函数可以运行
事实上因为flag默认是false,所以是一开始是Input的run()先执行,input的run()方法末尾将r.flag设为ture,所以下次循环进来时,Input里面if()判断为false,不执行,而此时Output的if()判断true,output执行,末尾有改变flag,使下次循环时时Input执行,如此反复下去的。。。
其实flag相当于一个开关,它的作用是控制Input 和 Output交替执行任务(线程间通讯),flag为ture时,Input执行动作,Oupt不执行;flag为false时,相反。
而为了保证一个执行完后轮到另一个执行,在执行代码的末尾,就会将flag的值改变,相当于通知对方,我完成了,你可以运行了 |