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

相关推荐
一定要AK3 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao3 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao4 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024064 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨4 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9994 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
哈里谢顿4 小时前
如何实现分布式锁
面试
功德+n4 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨4 小时前
python扫码登录dy
开发语言·python