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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李大伟 高级黑马   /  2013-4-19 09:33  /  1224 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李大伟 于 2013-4-19 22:42 编辑

生产者消费者中 、
Consumer2 中,private Resource2 res;        Consumer2(Resource2 res){
                this.res = res;
        } 这两句什么意思,麻烦给解释解释? 是为了使用资源么?
  1. class Consumer2 implements Runnable{
  2.         private Resource2 res;
  3.         Consumer2(Resource2 res){
  4.                 this.res = res;
  5.         }
  6.         public void run(){
  7.                 while(true){
  8.                         
  9.                         try{
  10.                                 res.out();
  11.                         }
  12.                         catch(Exception e){
  13.                                 
  14.                         }
  15.                         }
  16.         }
  17. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

4 个回复

倒序浏览
嗯,是为了使用资源,并且是为了保证不同线程所使用的资源是同一个资源。
这样新建一个对象,分别通过构造函数把同一个对象传进来就可以。
所以,两个实现Runnable的类里面都是这样写的。
也可以使用的单例设计模式,但会稍微麻烦一点。

总之,就是要想办法保证操作的是同一资源,如果不是同一资源,就不存在等待唤醒的问题了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
是为了保证不同线程使用同一个资源。

生产者生产的资源,正是消费者消费的资源;
将资源进行描述,创建资源对象,通过构造函数传入。
不同线程要操作同一资源。
回复 使用道具 举报
本帖最后由 lipingan0520 于 2013-4-19 17:49 编辑
  1. private Resource2 res
复制代码
说的是定义一个Resource2 类类型的变量 res
  1. Consumer2(Resource2 res){
  2.                 this.res = res;//这是Consumer2类中的一个构造方法,目的是在创建Consumer2类对象时传入参数,进行初始化。
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
是为了使用资源,通过构造函数将共享资源对象传进来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马