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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙峰 黑马帝   /  2012-6-4 17:40  /  1770 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Resource
{
             private String name;
             private int count=1;
            private boolean flag=false;
             public synchronized void set(String name)            //第12天视频中生产者,消费者问题的代码。 出现生产多个产品,才消费一个产品的问题。
      {                                                                             //老毕说:例子中有  t1,t2两个生产者,当t1进来后 执行S.o.p()语句后,flag=true,然后又执行 if(flag)
                 if(flag)                                                         //有wait(),被挂起,取消了资格,这时候 t2又进来了。      
                try(this.wait();) catch(Exception e){}        //问题就是:不是在 synchronized 函数中吗? t1还没出去,怎么t2就进来了呢?是不是t1被挂起后,锁也就释放了呢?
               this.name=name+" .....  "+count++;         //t2才能进来。
             System.out.println(Thread.currentThread().getName()+"...生产者"+this.name);
                   flag=true;
               this.notify()
            }
}

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

1 个回复

倒序浏览
这个问题的出现,虽然t1是在synchronized中,但是当t1在wait()时,会放弃掉自己的执行资格,同时也会释放掉锁,此时醒着的t2是能够进来的,只要他抢到执行权的话!

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马