最大的不同是在等待时 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. unity3d导出xcode项目使用afnetworking 3框架导致_kUTTagClassMIMEType 问题解决方案

    http://blog.csdn.net/huayu_huayu/article/details/51781953  (参考链接) Undefined symbols for architecture ...

  2. Android SugarORM(3)

    Android Sugar ORM (3) Android Sugar ORM 查询 我们在此之前介绍了一些关于Sugar ORM的简单操作, 现在我们就查询来具体说一下 Sugar ORM中的fin ...

  3. 乘风破浪,遇见未来元宇宙(Metaverse)之进入元宇宙世界,虚拟数字人行业洞察报告

    正值元宇宙热潮,虚拟数字人兴起 作为⼀个新兴领域,虚拟数字⼈已经引起市场和资本的⾼度关注,截⾄目前据不完全统计,全球范围已有500+虚拟数字人相关项目获得融资,融资总额超10亿美元,并且融资项目和总额 ...

  4. Centos安装Sublime text

    Sublime text官方给出方法如下: 1.终端执行以下命令: 安装 GPG 密匙 sudo rpm -v --import https://download.sublimetext.com/su ...

  5. Kali网络环境设置

    实验目的 掌握网卡.ssh.apache配置与开启 实验原理 在终端下,修改/etc/network/interfaces网卡文件,启动ssh和apache服务. 实验内容 网卡.ssh.apache ...

  6. 企业都适用的自助式BI工具

    ​未来的BI将是自助BI的时代.随着数据爆发式增长,像ERP.OA.CRM等系统在企业运用的越来越多,这些系统的使用必然会产生很多的数据.随着大数据的到来,企业在数据分析展现层面,面临着困境.下面就给 ...

  7. C# 枚举器(enumerator)

    总结: 1.枚举器就像是序列中的"游标"或"书签".可以有多个"书签",移动其中任何一个都可以枚举集合,与其他枚举器互不影响.用来遍历数据结 ...

  8. StringBuilder与String互转

    StringBuilder类是一个可变的字符序列. StringBuilder()           构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符.StringBuilder(Ch ...

  9. Chapter09 项目

    Chapter09 项目 房屋出租系统(面向对象中级) 9.1 房屋出租系统-需求 9.1.1项目需求说明 实现基于文本界面的<房屋出租软件>. 能够实现对房屋信息的添加.修改和删除(用数 ...

  10. Higncharts 制作

    <html> <head> <meta charset="UTF-8" /> <title>Highcharts 教程 | 菜鸟教程 ...