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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李晓旭 中级黑马   /  2012-3-13 23:32  /  1415 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李晓旭 于 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进程应该进不来,不是么?

2 个回复

倒序浏览
这就是wait()与sleep()的不同了   当线程进入wait()时会自动释放锁, 使得其他线程可以使用同步代码块或者是函数! 只有别的线程调用wait线程对象的notify()唤醒该线程   sleep() 是暂停 , 而不释放锁 , 你说的t1进入wait  它会把锁释放, 所以t2线程可以运行

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
哦~~说的太清楚,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马