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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Adjin 中级黑马   /  2014-7-22 11:56  /  976 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public synchronized void set(String name)
        {
                while(flag)
                        try{this.wait();}catch(Exception e){}
                this.name=name+"---"+count++;
                System.out.println(Thread.currentThread().getName()+"生产者"+this.name);
                flag=true;       
                this.notifyAll();
        }
假设有两个线程1,2来执行,1进来了,假设wait了,那么2不是进不来了吗?2能进来吗?看视频的时候两个都wait在这里了

4 个回复

倒序浏览
调用wait()方法的线程会释放同步锁
回复 使用道具 举报
可以进来的,要是不进来就没办办法唤醒啊
回复 使用道具 举报
明白了,一个在Thread类中,一个在Object()类中,
sleep()不释放同步锁,wait()释放同步锁。
回复 使用道具 举报
1进来之后wait(),1就释放了锁对象,后面语句就执行不了了,2虽然可以进来,但在whie循环时就wait()了释放锁,同样后面的执行不了,只有get()方法的线程进去时,while条件不成立,不wait()释放锁,就可以执行后面的语句了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马