java面试-0305-java线程调度方法?sleep()和wait()区别?

Object类

wait():阻塞挂起当前线程,直到其他线程调用motify/notifyAll或者线程的interrupt()方法,抛出InterruptedException异常才返回

wait(long timeout):当线程没有在timeout时间内被其它线程唤醒则超时返回

notify()/notifyAll():随机唤醒一个/唤醒所有在共享变量上调用wait系列方法后被挂起的线程

Thread类

join():线程A执行thread.join()时会等待thread线程的run方法执行完成后才继续执行

sleep(long millis)

yield():静态方法,让出CPU,有可能立马又得到CPU调度

interrupt():中断线程并设置中断标志为true,使wait、join、sleep抛出InterruptedException,不停止线程。需要捕获异常处理

isInterrupted():检测线程中断。不清除中断标志位

interrupted():检测线程中断,清除中断标志位。线程被中断时只会第一次返回true

wait是Object实例方法,sleep是Thread的静态方法

wait必须在同步方法或者同步块中调用(必须已获得对象锁)。否则抛出IllegalMonitorStateException,sleep没有限制

都让出CPU,wait释放占有的对象锁。sleep不会释放掉对象锁

wait必须等待Object.notify/notifyAll通知或者wait()等待时间到期后获得CPU时间片继续执行,sleep在休眠时间达到后获得CPU时间片继续执行

相关推荐
TDengine (老段)2 分钟前
TDengine 免费版说明
java·大数据·数据库·物联网·时序数据库·tdengine
乐观勇敢坚强的老彭4 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
码上有光6 分钟前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
这就是佬们吗12 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
asdzx6724 分钟前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf
孬甭_34 分钟前
C++ vector
开发语言·c++
学计算机的计算基1 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
AOwhisky1 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
程序员爱钓鱼1 小时前
Go 开发环境安装(Windows、macOS、Linux)
后端·面试·go