最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。Wait 通常被用于线

程间交互,sleep 通常被用于暂停执行。

直接了解的深入一点吧:

在 Java 中线程的状态一共被分成 6 种:

第 183 页 共 485 页初始态:NEW

创建一个 Thread 对象,但还未调用 start()启动线程时,线程处于初始态。

运行态:RUNNABLE

在 Java 中,运行态包括就绪态 和 运行态。

就绪态 该状态下的线程已经获得执行所需的所有资源,只要 CPU 分配执行权就

能运行。所有就绪态的线程存放在就绪队列中。

运行态 获得 CPU 执行权,正在执行的线程。由于一个 CPU 同一时刻只能执行一

条线程,因此每个 CPU 每个时刻只有一条运行态的线程。

阻塞态

当一条正在执行的线程请求某一资源失败时,就会进入阻塞态。而在 Java 中,阻

塞态专指请求锁失败时进入的状态。由一个阻塞队列存放所有阻塞态的线程。处

于阻塞态的线程会不断请求资源,一旦请求成功,就会进入就绪队列,等待执行。

PS:锁、IO、Socket 等都资源。

等待态

当前线程中调用 wait、join、park 函数时,当前线程就会进入等待态。也有一个

等待队列存放所有等待态的线程。线程处于等待态表示它需要等待其他线程的指

示才能继续运行。进入等待态的线程会释放 CPU 执行权,并释放资源(如:锁)

超时等待态

当运行中的线程调用 sleep(time)、wait、join、parkNanos、parkUntil 时,就

会进入该状态;它和等待态一样,并不是因为请求不到资源,而是主动进入,并

且进入后需要其他线程唤醒;进入该状态后释放 CPU 执行权 和 占有的资源。与

等待态的区别:到了超时时间后自动进入阻塞队列,开始竞争锁。

第 184 页 共 485 页终止态

线程执行结束后的状态。

注意:

wait()方法会释放 CPU 执行权 和 占有的锁。

sleep(long)方法仅释放 CPU 使用权,锁仍然占用;线程被放入超时等待队列,与

yield 相比,它会使线程较长时间得不到运行。

yield()方法仅释放 CPU 执行权,锁仍然占用,线程会被放入就绪队列,会在短时

间内再次执行。

wait 和 notify 必须配套使用,即必须使用同一把锁调用;

wait 和 notify 必须放在一个同步块中调用 wait 和 notify 的对象必须是他们所处

同步块的锁对象。

在 java 中 wait 和 sleep 方法的不同?的更多相关文章

  1. java中substring的使用方法

    java中substring的使用方法 str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str ...

  2. Java中Set的contains()方法

    Java中Set的contains()方法 -- hashCode与equals方法的约定及重写原则 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashCode() a ...

  3. [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较

    java中清空StringBuffer的方法,我能想到的有4种: 1. buffer.setLength(0);  设置长度为0 2. buffer.delete(0, buffer.length() ...

  4. java中BorderLayout的使用方法

    相关设置: 使用BorderLayout布局上下左右中布局5个按键,单击中间的那个按键时就关闭窗口 代码: /**** *java中BorderLayout的使用方法 * 使用BorderLayout ...

  5. 【Java】Java中常用的String方法

    本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...

  6. Java中Set的contains()方法——hashCode与equals方法的约定及重写原则

    转自:http://blog.csdn.net/renfufei/article/details/14163329 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashC ...

  7. java中equals和hashCode方法随笔二

    前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...

  8. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

  9. Java中wait和sleep方法的区别

    1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...

  10. java中File的delete()方法删除文件失败的原因

    java中File的delete()方法删除文件失败的原因 学习了:http://hujinfan.iteye.com/blog/1266387 的确是忘记关闭了: 引用原文膜拜一下: 一般来说 ja ...

随机推荐

  1. ASP.NET Core 6框架揭秘实例演示[12]:诊断跟踪的进阶用法

    一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根据当前的运行状态预知未来可能发生的问题,并将问题扼杀在摇篮中.诊断跟踪能够帮助我们有效地纠错和排错&l ...

  2. OpenStack学习系列之十二:安装ceph并对接OpenStack

        Ceph 是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统.Ceph 的统一体现在可以提供文件系统.块存储和对象存储,分布式体现在可以动态扩展.在国内一些公司的云环境中,通常 ...

  3. BI系统要自研还是采购?这篇文章告诉你

    首先说一下目前市面上的BI工具都有哪些吧.总体上,其实分为免费和付费两大阵营.免费阵营里,为首的当然是GA(也就是谷歌分析).PowerBI,但是由于有墙的限制,很多公司没法使用前者.付费阵营里,近两 ...

  4. 说出来你可能不信,我用excel就能做一张高端的统计报表

    统计报表是指各级企事业.行政单位按规定的表格形式.内容.时间要求报送程序,自上而下统一布置,提供统计资料的一种统计调查方式.统计报表具有来源可靠.回收率高.方式灵活等特点,是各个基层企业或事业单位填报 ...

  5. idea maven: invalid class root

    maven导入依赖没有问题,但是项目lib的类飘红,实际导入的类中有一些没有,这是idea的问题,重启idea,发现需要重新导入项目,重新导入后问题解决. 原因:可能之前误删了项目中idea的一些文件 ...

  6. Linq连接和Sql Server连接

    最近在研究连接的时候,被困惑了

  7. Goland的GC回收机制

    Goland的GC回收机制 GC触发的条件 阈值:默认内存扩大一倍,启动gc 定期:默认2min触发一次gc,src/runtime/proc.go:forcegcperiod 手动:runtime. ...

  8. LeetCode-079-单词搜索

    单词搜索 题目描述:给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母顺序,通过 ...

  9. SpringBoot入门二:与Mybatis整合

    一.编程步骤 1.引入依赖 springboot相关依赖(略).mybatis-spring-boot-starter.mysql.druid.lombook <dependency> & ...

  10. jmeter + tomcat + ant + svn +jenkins 实现持续集成测试

    l 安装jdk时候需要提前检查jdk是否安装成功 l 在dos下输入javac      java -version l l 安装jmeter l 校验是否安装成功: l 进入jmeter目录下bin ...