黑马程序员技术交流社区

标题: 此线程为何编译会出错,哎,好烦。找不到问题 [打印本页]

作者: azhuang    时间: 2015-10-26 16:07
标题: 此线程为何编译会出错,哎,好烦。找不到问题
class Resource
{
        String name;
        String sex;

}
class Input implements Runnable
{
        Resource r;
        Input(Resource r)
        {
                this.r = r;
               
        }
        public void run()
        {
                int x = 0;
                while(true)
                {         synchronized(r)
                        {       
                                if(r.flag)
                                        try{r.wait();}catch(InterruptedException e){}
                                if(x==0)
                                {
                                          r.name="mike";
                                          r.sex="nan";
                                }       
               

                                else
                                {
                                        r.name="丽丽";
                                        r.sex="女女女女";
                                }
                                r.flag = true;
                                r.notify();
                        }
                        x = (x+1)%2;
                }
                               
        }       
}
class Output implements Runnable
{
        Resource r;
        Output(Resource r)
        {       
                this.r = r;
        }       
        public void run()       
        {        while(true)
                {
                       
                        synchronized(r)
                        {
                        if(!r.flag)
                        try{r.wait();}catch(InterruptedException e){}

                        System.out.println(r.name+"....."+r.sex);

                        r.flag = false;
                        r.notify();
                        }
               
                }

        }       
}
class ResourceDemo
{
        public static void main(String[] args)
        {
         // 创建资源
        Resource r = new Resource();
        // 创建任务
        Input in = new Input(r);
        Output out = new Output(r);
        //  创建线程
        Thread t1 = new Thread(in);
        Thread t2 = new Thread(out);
        // 开启线程
        t1.start();
        t2.start();
        }
}


作者: 黑夜中那颗星    时间: 2015-10-26 16:43
if(r.flag)   把if改成while
      try{r.wait();}catch(InterruptedException e){}
作者: azhuang    时间: 2015-10-26 17:52
黑夜中那颗星 发表于 2015-10-26 16:43
if(r.flag)   把if改成while
      try{r.wait();}catch(InterruptedException e){}

还是一样,编译不了
作者: 史世锋    时间: 2015-10-26 19:19
把错误提示贴出来瞅瞅
作者: azhuang    时间: 2015-10-26 20:08
史世锋 发表于 2015-10-26 19:19
把错误提示贴出来瞅瞅

ResourceDemo.java:21: 错误: 找不到符号
                                if(r.flag)
                                    ^
  符号:   变量 flag
  位置: 类型为Resource的变量 r
ResourceDemo.java:21: 错误: 非法的类型开始
                                if(r.flag)
                                  ^
ResourceDemo.java:35: 错误: 找不到符号
                                r.flag = true;
                                 ^
  符号:   变量 flag
  位置: 类型为Resource的变量 r
ResourceDemo.java:56: 错误: 找不到符号
                        if(!r.flag)
                             ^
  符号:   变量 flag
  位置: 类型为Resource的变量 r
ResourceDemo.java:61: 错误: 找不到符号
                        r.flag = false;
                         ^
  符号:   变量 flag
  位置: 类型为Resource的变量 r
5 个错误

作者: chaoslu    时间: 2015-10-26 21:02
兄弟你的Resource 类里根本就没有flag变量啊,在 String sex;后边加一句boolean flag;就好了
作者: 疯狂的小豆丁    时间: 2015-10-27 08:05
大哥,不是吧,你Resource里面哪里来的flag?你这查找问题的能力得练啊
作者: azhuang    时间: 2015-10-27 10:50
疯狂的小豆丁 发表于 2015-10-27 08:05
大哥,不是吧,你Resource里面哪里来的flag?你这查找问题的能力得练啊

是啊。大哥,小弟没半点基础,现在在拼命自学过程中。前辈多多赐教。
作者: azhuang    时间: 2015-10-27 10:51
chaoslu 发表于 2015-10-26 21:02
兄弟你的Resource 类里根本就没有flag变量啊,在 String sex;后边加一句boolean flag;就好了 ...

恩,是这样的哦,真的,小弟我太笨了。现在在努力中




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