黑马程序员技术交流社区
标题:
请问怎么理解wait和sleep
[打印本页]
作者:
Cola
时间:
2014-3-1 14:49
标题:
请问怎么理解wait和sleep
本帖最后由 Cola 于 2014-3-2 18:49 编辑
wait和sleep方法都是线程中的方法,请问该怎么理解wait和sleep的区别呢?
wait:释放资源,释放锁;
sleep:释放资源,不释放锁。
以卖票的例子为例,资源是指票,释放资源的意思就是其他线程可以操作票;
那么请问释放锁是什么意思呢?
作者:
volvoxc
时间:
2014-3-1 15:07
我觉得这里的资源从更大的方面可以理解为cpu的资源,当一个线程调用wait和sleep方法后,这个线程就不再具有cpu的资源,不再具有执行权了,直到被其他线程调用同一个对象的notify方法和sleep的时间到了之后才可以再次去获取cpu的资源。释放锁的意思是,一个线程在一个同步方法中wait之后,其他线程就可以拿到这个锁,进方法内部去执行代码,sleep方法不释放锁,一个线程在一个同步方法中sleep后,其他线程拿不到同步锁,只能等sleep的方法苏醒过来出了同步,释放锁之后,其他线程才能拿到同步锁。我的理解,不对的地方,请指教。
作者:
陪你等日出
时间:
2014-3-1 15:33
释放锁是释放同步锁,释放资源是释放CPU执行资源,票是同步代码操作的数据,并不是你问题上说的释放的资源,sleep是占着CPU执行资源在那等待,过了指定的时间自动苏醒继续执行代码,而wait是放弃CPU的执行资源让当前线程在那等待,并放弃同步锁,让其他线程可以来操作同步代码,除非被notify或者notifyAll唤醒,不然一直等待。希望可以帮到你
作者:
山治0712
时间:
2014-3-1 16:08
资源同步后,只有得到锁的线程才能卖票,sleep不释放锁就表示其他线程卖不了票
作者:
osully
时间:
2014-3-1 20:43
理解一下 毕老师说的 火车上的厕所 的例子吧 就能理解锁了
作者:
刘树弘
时间:
2014-3-1 21:54
sleep是勤奋的职工,不能干活时,就趴在工作台(锁)上睡大觉,睡了一会自己会醒,别人也别想用工作台(锁)
wait是懒惰的职工,不能干活的时候,就离开工作台(锁)回家睡个浑天黑地,能干活时告诉我一声(唤醒)我再回来
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2