当前位置: 首页 > article >正文

Java 中的 sleep、wait、join 怎么理解

在 Java 中,sleep()、wait() 和 join() 都是与线程同步和控制相关的常用方法,它们各自有不同的功能和使用场景。以下是它们的区别和联系的详细分析:

sleep()

sleep() 是 Thread 类中的静态方法,用于让当前线程暂停执行指定的时间,并进入 阻塞状态。暂停期间,线程仍然持有任何锁,也就是说,sleep() 不会释放对象锁。

使用场景:常用于让线程暂时休眠一段时间。

主要特点:
线程在指定的时间结束后会自动恢复运行。

sleep() 不释放线程已经持有的锁,只是会让出时间片,其他线程获取不到这个线程的资源 。

可以被 interrupt() 方法打断,从而抛出InterruptedException。

wait()

wait() 是 Object 类中的方法,用于让线程等待,直到其他线程调用同一对象的 notify() 或 notifyAll() 方法,才能继续执行。调用 wait() 时,线程会进入 等待状态,并且会释放它持有的 对象锁。

使用场景:通常用于线程间通信,允许一个线程等待另一个线程的执行结果或通知。

public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException

主要特点:
线程必须在持有对象的锁(即在 synchronized 块内)时才能调用 wait()。
调用 wait() 后,线程会释放对象锁并进入等待状态,直到其他线程调用 notify() 或 notifyAll()。
wait() 必须和 notify() 或 notifyAll() 搭配使用。
可以设置超时时间来自动唤醒等待线程。
示例:

synchronized (lock) {
    lock.wait(); // 当前线程进入等待,并释放锁
    // 被唤醒后继续执行
}

join()

join() 是 Thread 类中的方法,用于让调用线程等待另一个线程完成执行。换句话说,调用某个线程的 join() 方法会让当前线程暂停,直到被调用的线程执行完毕。

使用场景:常用于确保一个线程的执行完毕之后,其他线程才能继续执行。

public final void join() throws InterruptedException
public final void join(long millis) throws InterruptedException

主要特点:
线程 A 调用线程 B 的 join() 方法时,线程 A 会进入阻塞状态,直到线程 B 执行完毕。
join() 可以设置超时时间,指定等待时间后,线程 A 可以继续执行,即使线程 B 未结束。
可以被 interrupt() 方法打断,抛出 InterruptedException。
示例:

Thread t = new Thread(() -> {
    // 线程执行逻辑
});
t.start();
t.join(); // 当前线程等待 t 线程执行完毕后再继续执行

http://www.kler.cn/news/309415.html

相关文章:

  • linux中的kill、pkill和killall
  • C++速通LeetCode简单第3题-相交链表
  • RTMP协议在无人机巡检中的应用场景
  • 【深度学习】【OnnxRuntime】【Python】模型转化、环境搭建以及模型部署的详细教程
  • Java学习线路(2024版)
  • 简单了解微服务--黑马(在更)
  • 安全运维教程(非常详细)从零基础入门到精通,看完这一篇就够了
  • 【Pycharm使用技巧记录手册】批量检索与替换功能——辅助Yolo训练标签label配置文件构建
  • Mac笔记本上查看/user/目录下的文件的几种方法
  • mysql配置优化和分组报错问题解决
  • 信号与线性系统综合实验
  • 87-java 可轮询锁和定时锁
  • 网络安全宣传周的时间,举办活动的方式和意义
  • 计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
  • 场外个股期权通道商是什么业务?个人投资者可以参与场外期权吗?
  • JavaScript ES6特性(var let const、function=>、增强表达赋值、类与对象)
  • 【大模型专栏—进阶篇】语言模型创新大总结——“三派纷争”
  • 微信小程序点赞动画特效实现
  • [乱码]确保命令行窗口与主流集成开发环境(IDE)统一采用UTF-8编码,以规避乱码问题
  • C++学习笔记(25)
  • TypeScript —枚举的应用
  • “拍照赚钱”的任务定价(2017数学建模国赛b题)
  • 中国农业银行——数据湖建设
  • 5V全桥驱动芯片单通道可替代型号LG9110S,应用于牙刷,电子锁,共享单车锁等产品中具有过温保护功能
  • Python模块化程序设计理念及实战
  • 【快慢指针】突破环形链表
  • 企微无限群发:精准营销与合规边界的探索
  • 性能测试的五大目标
  • 基于yolov8的舌苔识别检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • Meme“淘金”热潮下:Meme发射平台的安全风险分析