黑马程序员技术交流社区

标题: 关于同步函数内进程抢夺执行权的问题 [打印本页]

作者: 李晓旭    时间: 2012-3-13 23:32
标题: 关于同步函数内进程抢夺执行权的问题
本帖最后由 李晓旭 于 2012-3-13 23:39 编辑

//t1    t2    两个线程共同执行下列方法
public synchronized void set(String name)
        {   
                if(flag)
                        try{this.wait();}catch(Exception e){}        //t1线程在这里等待的时候(放弃执行权)     为什么t2线程可以进到这个同步函数中?
                this.name = name + ":::" + count++;
                System.out.println(Thread.currentThread().getName()+"...producer"+this.name);
                flag = true;
                this.notify();
        }

这是毕老师的一个线程间通讯的实例,当t1等待时,不是已经在同步函数中了么?
t2进程应该进不来,不是么?

作者: 赵孟恩    时间: 2012-3-13 23:54
这就是wait()与sleep()的不同了   当线程进入wait()时会自动释放锁, 使得其他线程可以使用同步代码块或者是函数! 只有别的线程调用wait线程对象的notify()唤醒该线程   sleep() 是暂停 , 而不释放锁 , 你说的t1进入wait  它会把锁释放, 所以t2线程可以运行
作者: 李晓旭    时间: 2012-3-14 00:05
哦~~说的太清楚,谢谢




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