A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潇湘溪语 中级黑马   /  2013-11-26 11:01  /  1514 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 潇湘溪语 于 2013-11-26 11:39 编辑

毕老师视频第12天,生产者与消费者的代码如下,但是产生了如下问题,请高人解决一下咯,多谢啦!

图片上传失真了,部分字迹如下:







class ProducerConsumerDemo//二个线程同时运行,同步机制,生产者和消费者
{
        public static void main(String[] args)
        {
                Res r = new Res();
                Pro p = new Pro(r);
                Con c = new Con(r);

                Thread t1 = new Thread(p);
                Thread t2 = new Thread(p);
                Thread t3 = new Thread(c);
                Thread t4 = new Thread(c);

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

class Res
{
        private String name;
        private int num = 1;
        private boolean flag = false;
        public synchronized void in(String name)
        {
                while(flag)
                        try
                        {
                                this.wait();
                        }
                        catch (Exception e)
                        {}
                this.name = name+"--"+num++;
                System.out.println(Thread.currentThread().getName()+"生产者"+this.name);
                flag = true;
                this.notifyAll();
        }
        public synchronized void out()
        {
                while(!flag)
                        try
                        {
                                this.wait();
                        }
                        catch (Exception e)
                        {}
                System.out.println(Thread.currentThread().getName()+"消费者...."+this.name);
                flag = false;
                this.notifyAll();
        }
}

class Pro implements Runnable
{
        private Res r;
        Pro(Res r)
        {
                this.r = r;
        }
        public void run()
        {
                while(true)
                {
                        r.in("商品");
                }
        }
}

class Con implements Runnable
{
        private Res r;
        Con(Res r)
        {
                this.r = r;
        }
        public void run()
        {
                while(true)
                {
                        r.out();
                }
        }
}





QQ图片20131126112250.jpg (5.66 KB, 下载次数: 17)

QQ图片20131126112250.jpg

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 神马都是浮云

查看全部评分

6 个回复

倒序浏览
是不是编码有问题呀?新建一个文件把代码复制过去,重新运行一下新文件试试看

评分

参与人数 1黑马币 +3 收起 理由
枫儿 + 3 赞一个!

查看全部评分

回复 使用道具 举报
freehiker 发表于 2013-11-26 11:16
是不是编码有问题呀?新建一个文件把代码复制过去,重新运行一下新文件试试看 ...

不是的,换其它文件编译是没有问题的,就是此段代码编译不出来…
回复 使用道具 举报
这段代码我放到Myeclipse下执行了一下,没有问题啊
回复 使用道具 举报
freehiker 发表于 2013-11-26 12:08
这段代码我放到Myeclipse下执行了一下,没有问题啊

我是用的editplus,工具级别没有Myeclipse高级。不过我通过一个字符一个字符的查找,发现Con这个类有问题。如果把这个类换个名字,就可以通过。
回复 使用道具 举报
好,问题解决了就好
回复 使用道具 举报
你这里面有非法字符,比如在Dos命令行的情况下,你这里的空格什么的编码是java不支持的,会提示非法字符。你是直接复制的别人的代码运行么?这样最有可能出现编码不支持的问题了。你需要重新手写代码。保存成ANSI编码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马