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

相关推荐
独自破碎E2 分钟前
【BISHI9】田忌赛马
android·java·开发语言
czy87874752 分钟前
const 在 C/C++ 中的全面用法(C/C++ 差异+核心场景+实战示例)
c语言·开发语言·c++
范纹杉想快点毕业8 分钟前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc
smileNicky34 分钟前
布隆过滤器怎么提高误差率
java
それども36 分钟前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
Java面试题总结1 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
马猴烧酒.1 小时前
【面试八股|Java集合】Java集合常考面试题详解
java·开发语言·python·面试·八股
以卿a1 小时前
C++(继承)
开发语言·c++·算法
lly2024061 小时前
XQuery 选择和过滤
开发语言
测试工程师成长之路1 小时前
Serenity BDD 框架:Java + Selenium 全面指南(2026 最新)
java·开发语言·selenium