面试题:Java中sleep和wait方法的区别
摘要:介绍sleep方法和wait方法的相同点和区别。
在学习JAVA多线程的时候,不少人会把函数sleep和wait搞混,傻傻分不清,简单粗暴地认为都是使得线程进入等待状态,比如就分不清方法sleep(long)和wait(long)。下面主要介绍sleep方法和wait方法的相同点和区别。
关于sleep() 和 wait()方法的异同点是什么的问题,首先需要明白的是sleep()是Thread的静态本地方法,wait()是Object的成员方法,由此可知,二者是有本质区别的。
相同点:
- 一旦执行方法,都可以使得当前的线程进入等待状态。
- 释放占用的CPU资源,使其它线程有机会获得执行权。
- wait和sleep都可以被中断(interrupt)。
不同点:
- 声明位置不同,sleep是声明在Thread类的静态方法,可以在任何线程中使用。wait是声明在Object类的成员方法,与对象的监视器锁相关,只能在同步代码块或同步方法中使用。
- 关于是否可以指定睡眠时间,sleep函数必须指定,wait可以指定也可以不指定。
- sleep(long millis) 会让当前正在运行的、占用CPU时间片的线程挂起指定时间,在休眠时间结束时自动苏醒进入可运行状态;切记,是不会由睡眠状态直接变为运行状态的。wait() 方法用来线程间通信,如果设置了时间,就等待指定时间;如果不设置,则该对象在其它线程被调用 notify() / notifyAll() 方法后进入可运行状态,才有机会竞争获取对象锁。
- 适用场景不同,sleep可以在任何需要的场景下调用,wait()必须在同步代码块或者同步方法的监视器中调用。
- 关于是否释放锁,sleep不会释放锁,线程睡着的时候,如果手里持有一把对象锁,那就一直抱着锁不松开,让其它线程无法得到这把锁,是一种贪婪的做法!wait素质很高,睡着的时候会释放锁,并进入线程等待池,以便其它线程可以获取该锁。
- sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字。
- 关于唤醒机制,sleep休眠之后退出阻塞,自动唤醒,不涉及线程间的通信;wait在被其它线程调用notify或notifyAll唤醒后,需要重新获取锁才能继续执行,常见于生产者-消费者问题中。
“故不积跬步,无以至千里;不积小流,无以成江海。”
面试题:Java中sleep和wait方法的区别的更多相关文章
- Java中wait和sleep方法的区别
1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...
- 转 Java中wait和sleep方法的区别
1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...
- Java中start和run方法的区别
一.问题引入 说到这两个方法就不得不说多线程,说到多线程就不得不提实现多线程的两种方式继承Thread类和实现Runable接口,下面先看这两种方式的区别. 二. Java中实现多线程 ...
- java中构造方法和普通方法的区别
1.普通方法: 定义:简单的说方法就是完成特定功能的代码块. 普通方法定义格式: 修饰符 返回值类型 方法名 (参数类型 参数名1,参数类型 参数名2,.........) { 函数体: re ...
- java 中sendredirect()和forward()方法的区别
一.文章1 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重 ...
- Java中构造方法跟普通方法的区别?
构造方法与普通方法的调用时机不同. 首先在一个类中可以定义构造方法与普通方法两种类型的方法,但是这两种方法在调用时有明显的区别. 1.构造方法是在实例化新对象(new)的时候只调用一次 2.普通方法是 ...
- java中getAttribute与getParameter方法的区别
知识点1:getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为object对象类型 例: r ...
- Java中==号与equals()方法的区别
String str1 = new String("abc"); String str2 = new String("abc"); System.out.pri ...
- Java 中 interrupted 和 isInterrupted 方法的区别?
interrupt interrupt 方法用于中断线程.调用该方法的线程的状态为将被置为"中断"状态. 注意:线程中断仅仅是置线程的中断状态位,不会停止线程.需要用户自己去监 视 ...
- 面试常见问题:java中wait()和sleep()方法的区别
wait()和sleep()方法都是用来控制多线程的有力工具,那么它们之间有什么巨大的区别呢? 1.wait()方法是属于Object类的,而sleep()方法是属于Thread类的. 2.最重要的一 ...
随机推荐
- ABAQUS弹塑性分析
1. 弹塑性分析的主要问题 1.1 elastic-plastic deform behavior abaqus 默认的塑性表现行为是金属材料经典塑性理论,采用mises屈服面定义各向同性屈服. 一般 ...
- Golang 1.16新特性-embed包及其使用
embed 是什么 embed是在Go 1.16中新加入的包.它通过//go:embed指令,可以在编译阶段将静态资源文件打包进编译好的程序中,并提供访问这些文件的能力. 为什么需要 embed 包 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(6)
1.问题描述: 使用华为内置的MapComponent, 发现显示不出来.查看日志, MapRender底层有报错. 解决方案: 麻烦按以下步骤检查下地图服务,特别是签名证书指纹那部分. 1.一般没有 ...
- VRRP+BFD实验
VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)的工作原理主要涉及多个路由器(或具备路由功能的设备)协同工作,通过VRRP报文和优先级机制来选举出一 ...
- jupyter -- 数据分析可视化开发工具
博客地址:https://www.cnblogs.com/zylyehuo/ jupyter介绍 jupyter就是anaconda提供的一个基于浏览器的可视化开发工具 jupyter的基本使用 启动 ...
- Tomcat的优化(分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优)
Tomcat的优化 一.Tomcat 优化 Tomcat 配置文件参数优化 二.系统内核优化 三.Tomcat 配置 JVM 参 ...
- 开源姿势识别 Demo
最近项目中要用到姿势识别,调研了 BlazePose. MoveNet 等模型,以下是一些详细的对比. 包括 mediapipe 和 tfjs 等运行环境,webgl,webgpu,wasm 都做了尝 ...
- 【软件】DVDStyler报错找不到VOB文件
DVDStyler失败报错找不到VOB文件 零.错误如下 ERR: 2 opening input video file "D:\Minuhy\Desktop\dvd\t\dvd-cache ...
- PDA自带有红外扫描头,不用点击焦点就能超高速超精准的扫条码、扫二维码
参考牛人DelphiTeacher的<PDA扫码?不要慌,只要20行代码!> 摘要: 实现监听器接口 然后在系统中注册该监听器,注册时指定只接收名称为com.kte.scan.result ...
- xe10.3+paserver在Ubuntu下运行错误
xe.3的paserver在Ubuntu下执行呈现乱七八糟的错误提示. 原因:Ubuntu的版本和paserver编译的环境不一致. 注意:使用ARM64的版本.如ubuntu-18.04.2-des ...