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时间片继续执行

相关推荐
蓝色王者19 小时前
springboot 2.6.13 整合flowable6.8.1
java·spring boot·后端
程序炼丹师19 小时前
CMakeLists中 get_filename_component详解
开发语言
Tao____19 小时前
基于Ruoyi开发的IOT物联网平台
java·网络·物联网·mqtt·网络协议
꧁Q༒ོγ꧂20 小时前
C++ 入门完全指南(四)--函数与模块化编程
开发语言·c++
花哥码天下20 小时前
apifox登录后设置token到环境变量
java·后端
listhi52020 小时前
对LeNet-5的matlab实现,识别MINST手写数字集
开发语言·matlab
qq_4335545420 小时前
C++ manacher(求解回文串问题)
开发语言·c++·算法
csbysj202020 小时前
Chart.js 饼图:全面解析与实例教程
开发语言
浩瀚地学20 小时前
【Java】常用API(二)
java·开发语言·经验分享·笔记·学习