黑马程序员技术交流社区

标题: 生产者和消费者运行乱码问题 [打印本页]

作者: 潇湘溪语    时间: 2013-11-26 11:01
标题: 生产者和消费者运行乱码问题
本帖最后由 潇湘溪语 于 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

作者: freehiker    时间: 2013-11-26 11:16
是不是编码有问题呀?新建一个文件把代码复制过去,重新运行一下新文件试试看
作者: 潇湘溪语    时间: 2013-11-26 11:32
freehiker 发表于 2013-11-26 11:16
是不是编码有问题呀?新建一个文件把代码复制过去,重新运行一下新文件试试看 ...

不是的,换其它文件编译是没有问题的,就是此段代码编译不出来…
作者: freehiker    时间: 2013-11-26 12:08
这段代码我放到Myeclipse下执行了一下,没有问题啊
作者: 潇湘溪语    时间: 2013-11-26 13:05
freehiker 发表于 2013-11-26 12:08
这段代码我放到Myeclipse下执行了一下,没有问题啊

我是用的editplus,工具级别没有Myeclipse高级。不过我通过一个字符一个字符的查找,发现Con这个类有问题。如果把这个类换个名字,就可以通过。
作者: freehiker    时间: 2013-11-26 13:06
好,问题解决了就好
作者: 樊志伟    时间: 2013-11-26 13:10
你这里面有非法字符,比如在Dos命令行的情况下,你这里的空格什么的编码是java不支持的,会提示非法字符。你是直接复制的别人的代码运行么?这样最有可能出现编码不支持的问题了。你需要重新手写代码。保存成ANSI编码




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