Java中Wait和Sleep,你真的了解它们的区别吗?

开发 前端
通过本文,我们了解了 Java 中 wait 和 sleep 的联系和区别,并且通过一个实际的案例演示了如何使用 wait 和 sleep方法来控制线程执行顺序。

大家好,我是小米,一个喜欢分享技术的程序员。今天我想和大家聊聊 Java 中的 wait 和 sleep 的区别和联系。

wait 和 sleep 的联系

wait 和 sleep 都可以使线程暂停执行一段时间,从而控制线程的执行顺序。具体来说,它们的联系体现在以下几个方面:

wait 和sleep 都是 Thread 类提供的方法,可以让线程暂停执行一段时间。

wait 和 sleep 都可以抛出 InterruptedException 异常。

在调用 wait 或 sleep 时,都会释放线程占用的锁。

在使用 wait 或 sleep 时,都应该在同步代码块或同步方法中调用,否则会抛出 IllegalMonitorStateException 异常。

wait 和 sleep 的区别

虽然 wait 和 sleep 都可以让线程暂停执行一段时间,但它们之间有很多不同之处。具体来说,它们的区别体现在以下几个方面:

  • 所属类:wait 方法属于 Object 类,而 sleep 方法属于Thread 类。
  • 作用范围:wait 方法会释放对象的锁,而 sleep 方法不会释放任何资源。
  • 使用范围:wait 方法只能在同步代码块或同步方法中调用,而 sleep 方法可以在任何地方调用。
  • 触发条件:wait 方法需要在获取对象的锁后才能调用,而 sleep 方法则可以在任何情况下调用。

案例演示

假设我们有一个电商网站,当用户下单时,我们需要将订单信息保存到数据库中,并发送短信通知用户订单已经成功下单。在这个过程中,我们需要控制线程的执行顺序,确保订单信息先保存到数据库,再发送短信通知用户。

下面是使用 wait 和 sleep 的代码示例:

图片

在上面的代码中,OrderService 类中的 save 方法用于将订单信息保存到数据库中,如果保存成功,则将 isSaved 设置为 true 并且唤醒正在等待的线程。sendMsg 方法用于发送短信通知用户订单已经成功下单,如果 isSaved 为 false ,则线程会一直等待直到 isSaved 变为 true。

在 OrderThread 中,我们先调用 OrderService 的 save 方法保存订单信息到数据库中,然后调用 Thread 类的 sleep 方法休眠5秒钟,最后调用 OrderService 的 sendMsg 方法发送短信通知用户。

可以看到,使用 wait 和 sleep 方法,我们可以很好地控制线程的执行顺序,确保订单信息先保存到数据库中,再发送短信通知用户。

END

通过本文,我们了解了 Java 中 wait 和 sleep 的联系和区别,并且通过一个实际的案例演示了如何使用 wait 和 sleep方法来控制线程执行顺序。在实际开发中,合理使用 wait 和sleep 方法可以帮助我们更好地控制线程的执行,提高程序的效率和稳定性。

责任编辑:武晓燕 来源: 知其然亦知其所以然
相关推荐

2011-05-26 15:52:31

sleep()wait()

2021-11-26 08:07:16

MySQL SQL 语句数据库

2018-12-21 11:24:55

Java时间处理编程语言

2022-03-14 07:53:27

ELTETL大数据

2023-11-01 13:48:00

反射java

2024-02-27 09:24:50

PyQt6中列表框树形视图

2014-04-17 16:42:03

DevOps

2022-07-26 00:00:22

HTAP系统数据库

2024-01-25 10:14:09

HashSetHashMapJava

2022-01-17 07:32:34

Java参数方法

2018-04-27 15:30:53

Java三目运算符

2023-05-10 11:07:18

2021-11-09 09:48:13

Logging python模块

2021-01-15 07:44:21

SQL注入攻击黑客

2023-07-05 08:05:17

Goerror应用场景

2014-11-28 10:31:07

Hybrid APP

2020-02-27 10:49:26

HTTPS网络协议TCP

2023-03-16 10:49:55

2019-09-16 08:40:42

2022-04-07 16:03:36

JavaScriptTypeScript
点赞
收藏

51CTO技术栈公众号