sleep 和 wait 的区别

这篇具有很好参考价值的文章主要介绍了sleep 和 wait 的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

1、sleep 和 wait 的区别

在 Java 中,线程的 “sleep” 和 “wait” 方法区别:

  1. “sleep” 方法是 Thread 类的静态方法,而 “wait” 方法是 Object 类的实例方法。

  2. “sleep” 方法会使线程进入睡眠状态,暂停执行一段时间,然后继续执行;而 “wait” 方法会使线程进入等待状态,直到其他线程调用了该对象的 “notify” 或 “notifyAll” 方法才会继续执行。

  3. “sleep” 方法不会释放线程持有的锁,而 “wait” 方法会释放线程持有的锁。

  4. “sleep” 方法通常用于在一段时间后再次执行任务,或在执行任务之前等待一段时间;而 “wait” 方法通常用于线程间的协作,比如等待其他线程的完成或等待某个条件的满足。

  5. “sleep” 方法的参数是一个时间段,而 “wait” 方法没有参数。

2、sleep 和 wait 的应用场景

sleep 和 wait 是两个在编程中常用的方法,它们的应用场景如下:

sleep 方法是线程类的一个静态方法,用于使线程暂停执行一段时间。主要应用场景包括:

  1. 实现简单的延时操作:可以使用 sleep 方法来实现简单的延时操作,例如在某个任务执行完毕后等待一段时间再执行下一个任务。

  2. 模拟并发情况:在多线程编程中,可以使用 sleep 方法来模拟并发情况,让线程暂停一段时间后再继续执行,以便观察多线程之间的交替执行。

  3. 控制程序执行速度:在某些情况下,为了控制程序的执行速度,可以使用 sleep 方法来降低线程的执行速度,以避免资源过度消耗。

wait 方法是 Object 类的一个实例方法,用于在多线程环境下进行线程间的通信和协调。主要应用场景包括:

  1. 实现线程间的等待和唤醒机制:可以使用 wait 方法来实现线程间的等待和唤醒机制,一个线程调用了对象的 wait 方法后会进入等待状态,直到其他线程调用了相同对象的 notify 或 notifyAll 方法来唤醒它。

  2. 实现生产者-消费者模式:在生产者-消费者模式中,消费者线程在没有数据可消费时需要等待,生产者线程在生产数据后需要通知消费者线程。这时可以使用 wait 和 notify/notifyAll 方法来实现线程间的协调和通信。

  3. 实现线程间的顺序执行:有时需要确保多个线程按照特定的顺序执行,可以使用 wait 和 notify/notifyAll 方法来实现线程间的顺序执行,通过等待和唤醒机制来控制线程的执行顺序。

总的来说,sleep 方法主要用于控制线程的执行时间和速度,而 wait 方法主要用于线程间的通信和协调。根据具体的需求和场景,选择合适的方法来实现所需的功能。

3、使用案例

线程 1 调用了 “sleep” 方法,暂停执行了一秒钟,然后继续执行。线程 2 调用了 “wait” 方法,进入等待状态,直到主线程调用了 lock.notify() 方法,才会继续执行。
注意,线程 2 在调用 “wait” 方法之前必须先获取 lock 对象的锁,否则会抛出 IllegalMonitorStateException 异常。

package com.pany.camp.thread;

public class SleepWait {
    public static void main(String[] args) {
        final Object lock = new Object();

        // 创建一个线程,调用 sleep 方法
        Thread thread1 = new Thread(() -> {
            System.out.println("Thread 1 started.");
            try {
                Thread.sleep(1000); // 线程睡眠 1 秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread 1 finished.");
        });

        // 创建一个线程,调用 wait 方法
        Thread thread2 = new Thread(() -> {
            System.out.println("Thread 2 started.");
            synchronized (lock) {
                try {
                    lock.wait(); // 线程等待
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("Thread 2 finished.");
        });

        // 启动线程
        thread1.start();
        thread2.start();

        // 等待一段时间
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 唤醒线程 2
        synchronized (lock) {
            lock.notify();
        }
    }
}

sleep 和 wait 的区别

💕💕 本文由激流原创,首发于CSDN博客,博客主页 https://blog.csdn.net/qq_37967783?spm=1010.2135.3001.5421
💕💕喜欢的话记得点赞收藏啊

sleep 和 wait 的区别文章来源地址https://www.toymoban.com/news/detail-474587.html

到了这里,关于sleep 和 wait 的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java八股文面试[多线程]——sleep wait join yield

          sleep和wait有什么区别 sleep 方法和 wait 方法都是用来将线程进入 阻塞状态 的,并且 sleep 和 wait 方法都可以响应 interrupt 中断,也就是线程在休眠的过程中,如果收到中断信号,都可以进行响应并中断,且都可以抛出 InterruptedException 异常,那 sleep 和 wait 有什么区别呢?

    2024年02月11日
    浏览(36)
  • selenium中三种等待方式:sleep,implicitly_wait,WebDriverWait

    强制等待, sleep,设置等待多长时间,就要等待多长时间。等待完成后,才会继续下一步: 相比较于sleep的强制等待,selenium中还有种等待,可以称之为智能等待:implicitly_wait。所谓智能等待,就是在我设置的等待时间范围内,只要满足了我的条件,就会立即结束等待,继续

    2024年02月16日
    浏览(50)
  • selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

    目录 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until()或者until_not()方法结合使用 WebDriverWait与expected_conditions结合使用 显示等待,自定义等待条件 设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点:不智能,使用太多的

    2024年02月16日
    浏览(29)
  • PHP之sleep() 与 usleep() 的区别

    PHP中的 sleep() 和 usleep() 函数都是用于暂停脚本执行的函数,但它们之间有一些区别: sleep() 函数: sleep() 函数用于在脚本中暂停指定的秒数。它接受一个参数,表示需要暂停的秒数,可以是整数或浮点数。在调用 sleep() 函数后,脚本将被阻塞指定的时间,然后再继续执行下一

    2024年02月06日
    浏览(31)
  • selenium Explicit 和 Implicit Waits区别

    The Selenium Browser Automation Project | Selenium Explicit and Implicit Waits Waiting is having the automated task execution elapse a certain amount of time before continuing with the next step. You should choose to use Explicit Waits or Implicit Waits. WARNING: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times. For example

    2024年02月10日
    浏览(27)
  • Verilog中if 语句与wait语句的区别

    (1) if语句是非阻塞语句 ,在initial语句中遇到 if 语句时,会判断条件是否成立,如果if条件成立,将会执行if条件成立后的语句;如果if 语句不成立,那么if后面的语句将会跳过而不执行。不会阻塞后面语句的执行,所以它是非阻塞语句。 (2) wait语句是阻塞语句 ,遇到

    2024年02月14日
    浏览(25)
  • 休息一会 sleep

    … note:: 莫听穿林打叶声,何妨吟啸且徐行。 苏轼 Linux sleep 命令可以用来将目前动作延迟一段时间。 sleep 的官方定义为: sleep - delay for a specified amount of time 或许你觉得计算机太累,让它稍事休息,亦或许过个个把钟头需要喝杯水,此时 sleep 就有点小作用了。 其用法如下:

    2024年02月02日
    浏览(29)
  • 【C语言】Sleep()函数----详解

    💓 博客主页:江池俊的博客 ⏩ 收录专栏:C语言初阶之路 🎉如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 前言  📌C语言sleep函数   sleep 函数的基本语法:  注意  📌实例 编写代码,演示多个字符从两端移动,向中间汇聚。 不使用slee

    2024年02月16日
    浏览(29)
  • Python sleep函数用法:线程睡眠

    如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用 time 模块的 sleep(secs) 函数来实现。该函数可指定一个 secs 参数,用于指定线程阻塞多少秒。 当前线程调用 sleep() 函数进入阻塞状态后,在其睡眠时间段内,该线程不会获得执行的机会,即使系

    2024年01月21日
    浏览(33)
  • 6 sleep与yield的比较

    调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞) 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException 睡眠结束后的线程未必会立刻得到执行 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性 调用 yield 会让当前

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包