黑马程序员技术交流社区

标题: 帮忙检查一下代码错误,自己实在看不出来了 [打印本页]

作者: 王春晓    时间: 2013-4-15 10:25
标题: 帮忙检查一下代码错误,自己实在看不出来了
本帖最后由 王春晓 于 2013-4-15 10:55 编辑

class ProducerConsumerDemo
{
        public static void main(String[] args)
        {
                Resource r = new Resource();

                Producer pro = new Producer(r);
                Consumer con = new Consumer(r);

                Thread t1 = new Thread(pro);
                Thread t2 = new Thread(con);

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

class Resource
{
        private String name;
        private int count = 1;
        private boolean flag = false;

        private synchronized void set(String name)
        {
                if(flag)
                        try
                        {
                                wait();
                        }
                        catch (Exception e)
                        {

                        }

                this.name = name+"--"+count++;

                System.out.println(Thread.currentThread().getName()+"...生产者..."+this.name);
                flag = true;
                this.notify();
        }
        public synchronized void out()
        {
                if(!flag)
                        try
                        {
                                wait();
                        }
                        catch (Exception e)
                        {

                        }
                System.out.println(Thread.currentThread().getName()+"...消费者..."+this.name);
                flag = false;
                this.notify();
        }
}

class Producer implements Runnable
{
        private Resource res;

        Producer(Resource res)
        {
                this.res = res;
        }
        public void run()
        {
                while(true)
                {
                        res.set("商品");
                }
        }
}

class Consumer implements Runnable
{
        private Resource res;

        Consumer(Resource res)
        {
                this.res = res;
        }
        public void run()
        {
                while(true)
                {
                        res.out();
                }
        }
}


报错:
ProducerConsumerDemo.java:73: 错误: set(String)可以在Resource中访问private
                        res.set("商品");
                           ^
1 个错误


照着毕老师的视频写的(多线程(线程间通信-生产者消费者)),写完报错,返回看了两三遍都没看出错误在哪。
麻烦大神们帮忙查下错,顺便说明一下报错原因,谢谢了!
作者: 高新星    时间: 2013-4-15 10:37
  1. class Resource
  2. {
  3.         private String name;
  4.         private int count = 1;
  5.         private boolean flag = false;

  6.        synchronized void set(String name)                [color=Red]//这里不能被private修饰;被private修饰后只能在本类中使用有效[/color]
  7.         {
  8.                 if(flag)
  9.                         try
  10.                         {
  11.                                 wait();
  12.                         }
  13.                         catch (Exception e)
  14.                         {

  15.                        }

  16.                this.name = name+"--"+count++;

  17.                System.out.println(Thread.currentThread().getName()+"...生产者..."+this.name);
  18.                 flag = true;
  19.                 this.notify();
  20.         }
  21.         public synchronized void out()
  22.         {
  23.                 if(!flag)
  24.                         try
  25.                         {
  26.                                 wait();
  27.                         }
  28.                         catch (Exception e)
  29.                         {

  30.                        }
  31.                 System.out.println(Thread.currentThread().getName()+"...消费者..."+this.name);
  32.                 flag = false;
  33.                 this.notify();
  34.         }
  35. }
复制代码

作者: 吴林飞    时间: 2013-4-15 10:49
Resource中的set方法没有暴露出去,把Private改成Public就行了
作者: 王春晓    时间: 2013-4-15 10:53
高新星 发表于 2013-4-15 10:37

明白了,谢谢!这里是因为我写代码的时候疏忽,而且自己还不太懂判断错误原因,把控不了太多的内容。




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