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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Cola 中级黑马   /  2014-3-1 14:49  /  1707 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Cola 于 2014-3-2 18:49 编辑

wait和sleep方法都是线程中的方法,请问该怎么理解wait和sleep的区别呢?
wait:释放资源,释放锁;
sleep:释放资源,不释放锁。
以卖票的例子为例,资源是指票,释放资源的意思就是其他线程可以操作票;
那么请问释放锁是什么意思呢?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

正序浏览
sleep是勤奋的职工,不能干活时,就趴在工作台(锁)上睡大觉,睡了一会自己会醒,别人也别想用工作台(锁)
wait是懒惰的职工,不能干活的时候,就离开工作台(锁)回家睡个浑天黑地,能干活时告诉我一声(唤醒)我再回来
回复 使用道具 举报
理解一下 毕老师说的 火车上的厕所 的例子吧 就能理解锁了
回复 使用道具 举报
资源同步后,只有得到锁的线程才能卖票,sleep不释放锁就表示其他线程卖不了票
回复 使用道具 举报
释放锁是释放同步锁,释放资源是释放CPU执行资源,票是同步代码操作的数据,并不是你问题上说的释放的资源,sleep是占着CPU执行资源在那等待,过了指定的时间自动苏醒继续执行代码,而wait是放弃CPU的执行资源让当前线程在那等待,并放弃同步锁,让其他线程可以来操作同步代码,除非被notify或者notifyAll唤醒,不然一直等待。希望可以帮到你

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
我觉得这里的资源从更大的方面可以理解为cpu的资源,当一个线程调用wait和sleep方法后,这个线程就不再具有cpu的资源,不再具有执行权了,直到被其他线程调用同一个对象的notify方法和sleep的时间到了之后才可以再次去获取cpu的资源。释放锁的意思是,一个线程在一个同步方法中wait之后,其他线程就可以拿到这个锁,进方法内部去执行代码,sleep方法不释放锁,一个线程在一个同步方法中sleep后,其他线程拿不到同步锁,只能等sleep的方法苏醒过来出了同步,释放锁之后,其他线程才能拿到同步锁。我的理解,不对的地方,请指教。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马