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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王春晓 于 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 个错误


照着毕老师的视频写的(多线程(线程间通信-生产者消费者)),写完报错,返回看了两三遍都没看出错误在哪。
麻烦大神们帮忙查下错,顺便说明一下报错原因,谢谢了!

3 个回复

倒序浏览
  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. }
复制代码
回复 使用道具 举报
Resource中的set方法没有暴露出去,把Private改成Public就行了
回复 使用道具 举报
高新星 发表于 2013-4-15 10:37

明白了,谢谢!这里是因为我写代码的时候疏忽,而且自己还不太懂判断错误原因,把控不了太多的内容。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马