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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© laizidiyu 黑马帝   /  2011-11-25 16:19  /  3742 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

武超 黑马帝 2011-11-27 16:58:16
楼主
在多线程程序中,sleep()用来暂停当前线程,CPU提供给其他线程,时间到了就回来,
wait()是暂停正在运行的线程,来执行其他线程,直到其他线程中的notify()函数被执行,再回到wait()继续开始执行

评分

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

查看全部评分

回复 使用道具 举报
wait()与sleep()的适用场景??

6 个回复

倒序浏览
延迟操作用sleep最好,可以控制时间。wait用在同步块中,使用wait会使当前线程释放锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使用sleep方法让出了cpu,但其他被同步锁挡住了的线程也无法得到执行。wait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行

评分

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

查看全部评分

回复 使用道具 举报
清秋 黑马帝 2011-11-25 19:32:07
板凳
sleep()是一个延时的操作,时间到了后就具备执行资格

wait()只有当notify()后才能具备执行资格

在多线程里用。。。

评分

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

查看全部评分

回复 使用道具 举报
冯敏 黑马帝 2011-11-25 22:49:52
报纸
wait(),当你不知道让该线程等待多长时间的时候可以用,
比如说有一个高级线程,必须等高级线程执行完,再继续执行这个线程但不知道高级线程会执行多长时间,所以用wait()方法,当高级线程执行完了,调用notify方法(或notifyAll)唤醒等待线程,
sleep(time)方法要传递一个时间参数,当时间一到,线程会继续执行,这个方法比较容易其睡眠时间,

我按我自己理解的方式写的,语言上可能组织有点乱,希望能听明白。。。

评分

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

查看全部评分

回复 使用道具 举报
Wait是Object类的方法,范围是使该Object实例所处的线程。
Sleep()是Thread类专属的静态方法,针对一个特定的线程。
一般情况下在线程中若只是想暂停就可以不用wait,只要用Thread.sleep(...)这个方法,就像睡觉会睡过点一样,sleep的线程在时间结束后也不一定能够立即恢复执行。

评分

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

查看全部评分

回复 使用道具 举报
颜小飞 黑马帝 2011-11-28 09:52:50
7#
sleep()用来暂停一个指定的时间内不运行,sleep的运行与否由线程自己设定的时间控制。
wait主要用来用同同步块中其它线程间的通信。

评分

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

查看全部评分

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