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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java 线程中的sleep和wait有一个共同作用,停止当前线程任务运行,但他们存在一定的不同,sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。wait只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用,调用sleep方法时等待一定的时间之后,自动醒来进入到可运行状态;调用了wait方法时,必须要采用notify()和notifyAll()方法才能唤醒该进程。

4 个回复

倒序浏览
我的理解是:
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,
线程不一定立即恢复执行。这是因为在那个时刻,
其它线程可能正在运行而且没有被调度为放弃执行,
除非(a)“醒来”的线程具有更高的优先级。
(b)正在运行的线程因为其它原因而阻塞。  
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,
该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
回复 使用道具 举报
sleep()方法是条件不满足线程停止,条件满足自动释放获得运行资格
wait()是线程互斥的,只有等待其他期限唤醒还能继续运行,否者一直阻塞

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
sleep()方法是使线程放弃执行权,由其他线程执行,当sleep 设定的时间满足后,
要看CPU切换到哪里,也就是说此线程不一定立即恢复执行,只有等到此线程从新获得执行权。
当线程调用wait()时,该线程会暂停执行,此线程所调对象进入等待状态,直到被唤醒或等待时间到。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

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