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

相关推荐
kong79069284 分钟前
SpringCache缓存
java·spring·缓存
程序猿小蒜8 分钟前
基于springboot的汽车资讯网站开发与实现
java·前端·spring boot·后端·spring
それども8 分钟前
SpringBoot 切面AOP获取注解为null
java·spring boot·spring
vx_bisheyuange10 分钟前
基于SpringBoot的热门旅游推荐系统设计与实现
java·spring boot·后端·毕业设计
代码不停10 分钟前
Java分治算法题目练习(快速/归并排序)
java·数据结构·算法
代码or搬砖11 分钟前
SpringBoot整合SpringMVC
java·spring boot·后端
程序定小飞12 分钟前
基于springboot的汽车资讯网站开发与实现
java·开发语言·spring boot·后端·spring
Kapaseker19 分钟前
Java 26 的新特性
java
大米粥哥哥27 分钟前
Qt 使用QAMQP连接RabbitMQ
开发语言·qt·rabbitmq·qamqp
yivifu36 分钟前
精益求精,支持处理嵌套表格的Word表格转HTML表格
开发语言·c#·word