详解Java中wait和sleep的区别

下面我将为大家详细讲解"详解Java中wait和sleep的区别"的完整攻略。

什么是wait和sleep?

在Java中,wait和sleep都是线程等待的方法。它们的作用都是让程序进入等待状态,但是两者还是有一些区别的。

wait和sleep的区别

  1. wait是Object类的方法,而sleep是Thread类的方法。
  2. 在调用wait的时候,线程会释放它所持有的锁并且进入等待状态,直到其他线程调用notify或者notifyAll方法,才能唤醒这个线程。而sleep会使当前线程进入阻塞状态,但不会释放它所持有的锁。

示例说明

下面分别给大家举两个例子说明一下wait和sleep的区别。

示例1:wait和notify的使用

public class WaitAndNotifyDemo {
    public static void main(String[] args) {
        final Object lock = new Object();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock) {
                    System.out.println(Thread.currentThread().getName() + "执行了wait方法");
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "被唤醒了");
                }
            }
        }, "线程1");

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock) {
                    System.out.println(Thread.currentThread().getName() + "执行了notify方法");
                    lock.notify();
                }
            }
        }, "线程2");

        t1.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t2.start();
    }
}

在上面的代码中,我们创建了一个共享锁lock,两个线程t1和t2共享这把锁。t1线程获取到锁之后,执行了wait方法以后,会释放这把锁,进入等待状态,直到t2线程调用notify方法将它唤醒。

示例2:sleep的使用

public class SleepDemo {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() + "开始执行");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + "执行结束");
    }
}

在上面的代码中,我们让主线程执行了sleep方法,这时主线程会进入阻塞状态,但不会释放它所持有的锁,3秒后再次执行后面的代码。

通过以上的示例可以很清楚地看到wait和sleep的区别。希望本篇攻略能对大家了解wait和sleep的区别有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java中wait和sleep的区别 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue+axios全局添加请求头和参数操作

    下面是详细讲解“vue+axios全局添加请求头和参数操作”的完整攻略。 1. 添加全局请求头 1.1 在 Vue 项目中安装 Axios 在 Vue 项目中使用 Axios 首先需要安装 Axios。可以通过以下命令安装: npm i axios -S 1.2 声明 Axios 在 Vue 项目中创建一个 axios.js 文件,然后声明 Axios 并设…

    Vue 2023年5月28日
    00
  • vue2单元测试环境搭建

    Vue2单元测试环境搭建 单元测试是为了保证代码质量而必要的步骤。Vue2的单元测试环境搭建涉及的技术包括mocha、chai、sinon等。本文将详细讲述Vue2单元测试环境搭建的步骤和示例。 步骤 安装依赖 首先需要安装mocha、chai、sinon和vue-test-utils等依赖。 npm install –save-dev mocha cha…

    Vue 2023年5月28日
    00
  • 如何在Vue中使用debouce防抖函数

    当我们在Vue组件中使用一些高频操作时,例如input事件的实时搜索,我们会发现输入一个字母就会发送一次请求,导致不必要的请求和资源浪费,这时候可以通过引入debounce防抖函数进行优化。下面是关于在Vue中使用debounce防抖函数的完整攻略: 1. 安装lodash debounce函数通常是使用lodash库中的_.debounce函数来实现的,因…

    Vue 2023年5月28日
    00
  • 在Vue环境下利用worker运行interval计时器的步骤

    在Vue环境下利用worker运行interval计时器的步骤可以分为以下几步: 创建worker文件 在项目根目录下新建一个worker.js文件(文件名可以自定义),用来处理计时器的逻辑。 在Vue组件中引入worker文件 在Vue组件中引入worker.js文件,可以通过import的方式: import MyWorker from "@/…

    Vue 2023年5月29日
    00
  • 浅谈vue的第一个commit分析

    下面我来详细讲解”浅谈vue的第一个commit分析”的完整攻略。 1. 了解Vue.js的号召与目标 Vue.js起源于2013年,是由一名华人开发者尤雨溪(Evan You)所创建的。他旨在创造一款简单、灵活的 JavaScript 框架用于构建用户界面。Vue.js也称为渐进式JavaScript框架,具有轻量级、易上手、高效渲染等特点。Vue.js近…

    Vue 2023年5月27日
    00
  • 关于vue-cli 3配置打包优化要点(推荐)

    我来详细讲解一下关于Vue-CLI 3的打包优化要点。 1. 配置文件 Vue-CLI 3的配置文件是通过vue.config.js文件进行配置的。我们可以在这里设置打包的基本配置、压缩代码、CDN等。 2. 代码分割 代码分割是优化打包体积的一个非常重要的方式。一般来说,我们可以通过以下方式进行代码分割: 异步组件:在路由懒加载、组件懒加载的时候使用imp…

    Vue 2023年5月29日
    00
  • Vue2.x 项目性能优化之代码优化的实现

    为了优化Vue2.x项目的性能,代码优化是非常重要的一部分。下面是一些可以实现的代码优化技巧: 1. 使用Vue的异步组件 Vue的异步组件用于延迟加载组件,避免不必要的资源浪费。异步组件可以通过Vue.component或Vue.extend创建。 以下代码展示了如何在Vue中使用异步组件: // 普通组件 import NormalComp from ‘…

    Vue 2023年5月28日
    00
  • Vue实现双向绑定的原理以及响应式数据的方法

    Vue 实现数据的双向绑定可以分为以下几个步骤: 将模板中的指令和事件监听器转换成渲染函数; 在渲染函数中解析表达式,生成虚拟 DOM; 将虚拟 DOM 映射到真实的 DOM 并渲染到页面; 监听数据的变化,当数据发生变化时,重新生成虚拟 DOM,并且通过 diff 算法计算出真实 DOM 的最小更新范围,最后将更新的部分重新渲染到页面上。 Vue 实现数据…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部