ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java多线程中调用wait() 和 sleep()方法有什么不同?

2022-02-14 21:04:40  阅读:197  来源: 互联网

标签:调用 Java 异常 sleep 线程 多线程 方法 wait


本篇内容为线程专题 -- 线程的创建,状态,工作过程中的部分内容。

二者区别

sleep()和wait()都是使线程暂停执行一段时间的方法。

1)原理不同

sleep()方法是Thread类中的一个静态方法,是线程用来控制自身流程的。

wait()方法是Object类中的方法,用于线程间的通信。

2)对锁的处理机制不同

线程调用共享对象的wait()方法后会释放当前共享变量持有的锁。

调用sleep()方法的线程不会释放当前持有的锁。

3)使用地方不同

sleep方法则可以放在任何地方使用,而wait()方法必须放在同步方法或者同步代码块中使用。

4)异常处理

sleep()方法必须捕获异常,而wait()、notify()、notifyAll()不需要捕获异常。

补充说明

(1)由于sleep不会释放锁标志,容易导致死锁问题的发生,一般情况下,不推荐使用sleep()方法,而推荐使用wait()方法。

(2)如果调用wait()方法的线程没有事先获取该对象的监视器锁,则调用wait()方法时调用 线程会抛出IllegalMonitorStateException异常。

实例

待补充

标签:调用,Java,异常,sleep,线程,多线程,方法,wait
来源: https://www.cnblogs.com/liaowenhui/p/15894089.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有