黑马程序员技术交流社区

标题: 关于线程间通信--生产者消费者的问题 [打印本页]

作者: 你好我是潘机智    时间: 2015-4-16 11:19
标题: 关于线程间通信--生产者消费者的问题
class ChanPin
{
        private String name;
        private int id=1;
        private boolean flag=false;
        public synchronized void set(String name)
        {
                while(flag)
                        try{wait();}catch (Exception e){}
                this.name=name+"--"+id++;

                System.out.println(Thread.currentThread().getName()+"我是生产者"+this.name);
                flag=true;
                this.notifyAll();
        }

        public synchronized void out()
        {
                while(!flag)
                        try{wait();}catch (Exception e){}
                       
                System.out.println(Thread.currentThread().getName()+"消费者"+this.name);
                flag=false;
                this.notifyAll();
        }
}
class ShengChanZhe implements Runnable
{
        private ChanPin chan;
        ShengChanZhe(ChanPin chan)
        {
                this.chan=chan;
        }
        public void run()
        {
                while(true)
                {
                        chan.set("chanpin");
                }
       
        }
}
class XiaoFeiZhe implements Runnable
{
        private ChanPin chan;
        XiaoFeiZhe(ChanPin chan)
        {
                this.chan=chan;
        }
        public void run()
        {
                while(true)
                {
                        chan.out();
                }
        }
}
class ShengChanZheXiaoFeiZheDemo
{
        public static void main(String[] args)
        {
                ChanPin c=new ChanPin();
                ShengChanZhe sheng=new ShengChanZhe(c);
                XiaoFeiZhe xiao=new XiaoFeiZhe(c);
               
                Thread t1=new Thread(sheng);
                Thread t2=new Thread(sheng);
                Thread t3=new Thread(xiao);
                Thread t4=new Thread(xiao);

                t1.start();
                t2.start();
                t3.start();
                t4.start();
       
        }
}

这是视频里毕老师打过的程序,我自己打的时候一些英文单词我就用拼音代替了
问题是在ChanPin类中 flag开始初始化如果为true的话 后面的flag的赋值也变化,
false改成true true改成false 为什么输出不了语句?
作者: lurenge    时间: 2015-4-16 11:21
之前也搞不懂线程的问题
作者: 你好我是潘机智    时间: 2015-4-16 11:51
自己顶一下 各位大神 快来啊
作者: 仅此一抹心醉    时间: 2015-4-16 14:02
可以输出啊

QQ截图20150416140128.png (6.87 KB, 下载次数: 8)

QQ截图20150416140128.png

作者: 你好我是潘机智    时间: 2015-4-16 16:55
仅此一抹心醉 发表于 2015-4-16 14:02
可以输出啊

我这里输出不了 不知道怎么发图片 不能给你看结果
作者: 仅此一抹心醉    时间: 2015-4-17 01:04
你好我是潘机智 发表于 2015-4-16 16:55
我这里输出不了 不知道怎么发图片 不能给你看结果

最底下回复框的上面一行最后一个像回形针的就可以贴图,或者可以点高级模式




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2