sleep 和 wait 的区别

为什么80%的码农都做不了架构师?>>>   hot3.png

面试中常问的就是 sleep 和 wait 有什么不同吗?为了面试时候发挥的更好,我在这里总结分享下。

首先对于 sleep() 方法,我们首先要知道该方法是属于 Thread 类中的。而 wait() 方法,则是属于Object类中的。(说完这句之后面试官会不会问你说下 object 类中的方法。。。哈哈哈)

最主要是 sleep 方法不会释放对象锁 ,而 wait 方法释放对象锁 。

sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争 cpu 的执行时间。
因为 sleep() 是 static 静态的方法,他不能改变对象的机锁,当一个 synchronized 块中调用了 sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。

当一个线程执行到 wait 方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过 notify,notifyAll 方法来唤醒等待的线程。

package com.example.demo;public class T {public static void main(String[] args) {new Thread(new t1()).start();try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}new Thread(new t2()).start();}private static class t1 implements Runnable {@Overridepublic void run() {synchronized (T.class) {System.out.println("start t1...");System.out.println("t1 wait...");try {// 调用 wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池T.class.wait();} catch (Exception e) {e.printStackTrace();}}System.out.println("t1 going on....");System.out.println("t1 over...");}}private static class t2 implements Runnable {@Overridepublic void run() {synchronized (T.class) {System.out.println("start t2...");System.out.println("t2 sleep...");// 只有针对此对象调用 notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。T.class.notify();try {// sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。// 在调用 sleep()方法的过程中,线程不会释放对象锁。Thread.sleep(3000);} catch (Exception e) {e.printStackTrace();}System.out.println("t2 going on....");System.out.println("t2 over...");}}}
}

第一种情况结果,使用 wait 释放锁,并且唤醒等待线程。

619db10d710f345de4478bf82b51e767ead.jpg

第二种情况不唤醒等待线程,注释掉

T.class.wait();

结果程序会一直挂起。

53a42868a27da17e1b79ee66180d3fcc187.jpg

 

水平有限,若有问题请留言交流!

互相学习,共同进步:) 转载请注明出处谢谢!

转载于:https://my.oschina.net/hp2017/blog/1863078

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT 中textEdit 和 textBrowser 无法使用斜体及加粗等 解决办法

编辑框的几个种类 QT 中一共四个文本编辑框 分别是 Line Edit 、Text Edit、 Plait Text Edit和textBrowser四种文本编辑框架! 一、输入内容不同 1、LineEdit:LineEdit的输入内容为单行文本输入。 2、TextEdit:TextEdit的输入内容为多行文…

变量属性

变量属性 C语言的变量属性 C语言中的变量可以有自己的属性在定义变量的时候加上“属性”关键字属性关键字指明变量的特有意义auto关键字 auto即C语言中局部变量的默认属性auto表明将被修饰的变量存储在栈上编译器默认所有的局部变量都是auto的register关键字 register关键字指明…

Dubbo 整合 Pinpoint 做分布式服务请求跟踪

2019独角兽企业重金招聘Python工程师标准>>> 在使用Dubbo进行服务化或者整合应用后,假设某个服务后台日志显示有异常,这个服务又被多个应用调用的情况下,我们通常很难判断是哪个应用调用的,问题的起因是什么&#xff0…

C#2.0 委托

委托 委托是一个非常不错的设计,允许我们把方法做为参数传递,实现了开放閉放原则。在方法中我们只要有一个委托占位,调用者就可以传入符合签名的方法来做不同的操作,这也面向对象开发中多态的魅力。 但是在C#1.0的时候&#xff…

qt乱码Could not decode“xxx.cpp“ with “UTF-8“-encoding.Editing not possible问题处理

问题描述:如题: 解决方法: 1、点击Select Encoding按钮 2、选择按照系统编码 3、选中System后点击按编码重新载入 4、问题解决

特斯拉自动驾驶系统秘密,来自特斯拉AI总监爆料

据外媒报道,特斯拉汽车公司人工智能(AI)总监安德烈卡帕西(Andrej Karpathy)日前参加2018年TRAIN AI大会时,剖析了该公司构建自动驾驶仪(Autopilot)计算机视觉解决方案的方法。据介绍,Autopilot编…

快捷键汇总

navicat 运行选中代码 ctrshiftr navicat 运行所有代码 ctrr 快速显示桌面 wind 转载于:https://www.cnblogs.com/caer/p/6064571.html

QT右键点击添加库不响应的解决办法

问题描述 QT在pro右键点击添加库不响应 解决方案 双击打开pro文件 在pro文件界面里单击鼠标右键,并选择添加库。 解决问题

爬取前尘无忧python职位信息并保存到mongo数据库

1.re实现 1 import re,os2 import requests3 from requests.exceptions import RequestException4 5 MAX_PAGE 10 #最大页数6 KEYWORD python7 headers {8 User-Agent:9 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, lik…

Apache JMeter 记一次使用HTTP工具POST提交JSON数据进行送积分高并发压测(二)

一、前言 前面文章已经介绍Apache JMeter的基本概率和如果使用,但作为一个开发人员,自己写的代码都应该要好好的COD EREVIEW,好好的自测吧。但是有些场景比如高并发、负载和性能测试的时候,不借助工具是不好进行测试的。Jmter工具设计之初是用…

【vim】几种模式的切换

很多初学者启动vim后,不知道怎么输入字符:按了半天字母,结果屏幕还是空的。 vim和记事本或WORD不一样,不是一打开后就可以输入文字,此时它处于正常模式。 vim一共有4个模式: 正常模式 (Normal-mode) 插入模…

SSH初体验系列--Hibernate--1--环境配置及demo

最近在学hibernate,常见的教程都是搭配mysql,因为公司本地电脑用的是pg,所以就尝试着做个pg的小demo. 自己也是边学边写,只当是加深印象.话不多说,直接开始; 一) 准备工作; 1) 本地安装postgresql ,这个不多说,自己去网上下载; 注: 本次使用的…

Qt学习:QAction系列详解

一、QAction类详解 【详细描述】 QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中。 应用程序可以通过菜单,工具栏按钮以及键盘快捷键来调用通用的命令。由于用户期望每个命令都能以相同的方式执行,而不管命令所使用的…

Linux 文件系统 EXT4 的前世今生

在先前关于Linux文件系统的文章中,我写了一份说明书去介绍Linux文件系统,里面有一些高级的概念,比如说,一切都是文件。我很想去深入地讨论更多EXT文件系统的特性的信息。所以,首先让我们来回答这个问题:什么…

zabbix监控系列(5)之通过trap模式监控网络设备

转载于:https://www.cnblogs.com/liaojiafa/p/7216749.html

struts2框架下的一个简单的ajax例子

举个例子 jsp页面&#xff1a; <% page language"java" import"java.util.*" pageEncoding"utf-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":…

第二部分:志愿录取标准

第二部分&#xff1a;志愿录取标准 零、概况一、传统志愿录取过程二、平行志愿录取过程三、17年志愿录取过程 零、概况自1977年&#xff0c;恢复高考以来&#xff0c;高考录取标准&#xff0c;作为公平线&#xff0c;都是相当透明的。这部分分享&#xff0c;以录取标准&#xf…

程序员懂点经济学-股票投资

2019独角兽企业重金招聘Python工程师标准>>> ▍写在前面 前面有文章 关于程序员如何赚点小钱 讲过 合理的投资理财&#xff0c;可以了解一下. 再次建议&#xff0c;不要将全身家当投入股市&#xff0c;建议投入10~30%就好了. (不要拿输不起的钱来炒股&#xff0c;比…

彻底弄懂响应式设计中的em和rem

前一阵子在响应式开发中遇到了em和rem的问题&#xff0c;也上网搜过一些文章&#xff0c;篇幅很长&#xff0c;也没有仔细看&#xff0c;今天来总结一下。 rem是指&#xff1a;根元素&#xff08;root element&#xff0c;html&#xff09;的字体大小&#xff0c; em是指&#…

JAVA字符串

字符串 1. 字符串 1.1 字符串概述和特点 java.lang.String类代表字符串。 API当中说&#xff1a;Java 程序中的所有字符串字面值&#xff08;如 "abc" &#xff09;都作为此类的实例实现。 其实就是说&#xff1a;程序当中所有的双引号字符串&#xff0c;都是String类…