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

© 奋发吧小白 高级黑马   /  2014-8-25 00:30  /  923 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

咨询下大家:
在毕老师的视频第146讲 多线程(线程间通信-生产者消费者)中

public synchronized void set(String name)
        {
                if(flag)
                        try
                {
                                this.wait();
                }catch(Exception e)//t1(失去资格) t2(失去资格)
                {
                        e.printStackTrace();
                }
                this.name = name+"......"+count++;
                System.out.println(Thread.currentThread().getName()+"...生产者。。。。"+this.name);
                flag = true;
                this.notify();
        }
        public synchronized void out()
        {
                if(!flag)
                        try
                {
                                this.wait();
                }catch(Exception e)
                {
                        e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"...消费者。。。。"+this.name);
                        flag = false;
                        this.notify();
        }
我想问一下,在同步函数set中 线程 t1 进去后 不出来 t2  还能进的去?为什么?

1 个回复

倒序浏览
是可以进去的。虽然t1进去后,会持有锁,暂时其他线程是进不来的,但如果进过if判断,t1 wait之后,就会释放锁,其他线程拥有同等的机会,也就是t2可能会拿到执行权,可以进入函数中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马