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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不愿一人 中级黑马   /  2013-12-23 18:08  /  1415 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚刚看了下以前做的视频笔记,看到线程时,对sleep和wait这两个方法有点
迷惑,两者都可以暂停线程,但是有什么区别吗?求大神给介绍的详细点,我线程这一块
学的不怎么好

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

2 个回复

倒序浏览
本帖最后由 熊志伟 于 2013-12-23 18:25 编辑

(1)这两个方法来自不同的类,sleep()来自Thread类,和wait()来自Object类
(2)sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,
    要让b线程睡觉要在b的代码中调用sleep。而wait()是Object类的非静态方法
(3)sleep()释放资源不释放锁,而wait()释放资源释放锁;
(4)使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
具体的这个帖讲的很详细: http://bbs.itheima.com/forum.php?mod=viewthread&tid=93782

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
简单来说
wait
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。也就是说当线程由于wait引起的等待时,这个线程自己不会发生状态改变,若无其它线程唤醒,它将一直等待。
sleep
在指定的时间内让当前正在执行的线程休眠,时间到后自动可以唤醒,不需其它线程来唤醒。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

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