黑马程序员技术交流社区

标题: 多线程同步函数的一个问题 [打印本页]

作者: Adjin    时间: 2014-7-22 11:56
标题: 多线程同步函数的一个问题
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在这里了
作者: fantacyleo    时间: 2014-7-22 12:00
调用wait()方法的线程会释放同步锁
作者: idency    时间: 2014-7-22 12:04
可以进来的,要是不进来就没办办法唤醒啊
作者: Adjin    时间: 2014-7-22 12:18
明白了,一个在Thread类中,一个在Object()类中,
sleep()不释放同步锁,wait()释放同步锁。
作者: shen7518    时间: 2014-7-22 12:25
1进来之后wait(),1就释放了锁对象,后面语句就执行不了了,2虽然可以进来,但在whie循环时就wait()了释放锁,同样后面的执行不了,只有get()方法的线程进去时,while条件不成立,不wait()释放锁,就可以执行后面的语句了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2