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

相关推荐
程序员游老板3 分钟前
基于SpringBoot3_vue3_MybatisPlus_Mysql_Maven的社区养老系统/养老院管理系统
java·spring boot·mysql·毕业设计·软件工程·信息与通信·毕设
star _chen16 分钟前
C++ std::move()详解:从小白到高手
开发语言·c++
lzhdim21 分钟前
C#开发者必知的100个黑科技(前50)!从主构造函数到源生成器全面掌握
开发语言·科技·c#
福尔摩斯张21 分钟前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
刺客xs30 分钟前
Qt----事件简述
开发语言·qt
程序员-King.33 分钟前
【Qt开源项目】— ModbusScope-进度规划
开发语言·qt
@淡 定37 分钟前
Spring中@Autowired注解的实现原理
java·后端·spring
前端一小卒38 分钟前
一个看似“送分”的需求为何翻车?——前端状态机实战指南
前端·javascript·面试
syt_101342 分钟前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
liu****42 分钟前
Python 基础语法(二):程序流程控制
开发语言·python·python基础