您的位置:首页 > 编程语言 > Java开发

Java多线程中sleep()和wait()的区别

2018-02-10 08:59 169 查看
在java多线程中,sleep()和wait()都可以让当前线程挂起等待,但他们的用法却有很大不同。我们通过下表来做出对比:
类目sleep()wait()
调用者该方法的调用者是线程对象调用者一般为锁对象
可否唤醒不可可以被notify方法唤醒
是否释放锁不释放释放
效果全员等待我等待,大家上
 用代码来描述会更加清晰,注意第25行、26行,当使用sleep和wait时,结果完全不一样
 使用wait()时的输出,每一次交易成功后,进行了全员等待,因为sleep方法不释放锁:
 而使用wait(10000)方法,输出结果如下,每次交易成功后,线程进入等待(10秒)状态,而后释放了锁,其他线程拿到锁后进行交易,而在第三次交易完成后,还是进行了等待,这是因为,我们的三个线程当时都处于了挂起状态:
如果,我们不给wait()方法设置参数,或者设置wait(0),线程将进入无限期的挂起,直到外部notify了此线程。我们用下面的例子说明,仍然是在之前的代码基础上修改,在线程获取锁之后,唤醒其他挂起的线程:
 输出结果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程