在 java 中 wait 和 sleep 方法的不同?
最大的不同是在等待时 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 方法的不同?的更多相关文章
- java中substring的使用方法
java中substring的使用方法 str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str ...
- Java中Set的contains()方法
Java中Set的contains()方法 -- hashCode与equals方法的约定及重写原则 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashCode() a ...
- [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较
java中清空StringBuffer的方法,我能想到的有4种: 1. buffer.setLength(0); 设置长度为0 2. buffer.delete(0, buffer.length() ...
- java中BorderLayout的使用方法
相关设置: 使用BorderLayout布局上下左右中布局5个按键,单击中间的那个按键时就关闭窗口 代码: /**** *java中BorderLayout的使用方法 * 使用BorderLayout ...
- 【Java】Java中常用的String方法
本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...
- Java中Set的contains()方法——hashCode与equals方法的约定及重写原则
转自:http://blog.csdn.net/renfufei/article/details/14163329 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashC ...
- java中equals和hashCode方法随笔二
前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...
- java中static变量和方法的总结
转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...
- Java中wait和sleep方法的区别
1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...
- java中File的delete()方法删除文件失败的原因
java中File的delete()方法删除文件失败的原因 学习了:http://hujinfan.iteye.com/blog/1266387 的确是忘记关闭了: 引用原文膜拜一下: 一般来说 ja ...
随机推荐
- ARM7、ARM9、ARM11、ARM-Cortex系列的关系
参考资料: https://zhuanlan.zhihu.com/p/92315825 https://zhuanlan.zhihu.com/p/82337495 ARM是Advanced RISC ...
- docker迁移工作目录
yum安装的docker 工作目录在系统盘,迁移到数据盘 首先需要停止docker服务 systemctl stop docker.service 通过命令df -h 先去看下磁盘大概的情况,找一个大 ...
- Linux C/C++ UDP 网络通信
昨晚 Vv 想让我给她讲讲网络编程,于是我就傻乎乎的带她入了门... 以下内容为讲课时制作的笔记- 1. socket() 函数 1.1 头文件 #include<sys/socket.h> ...
- 开源爱好者月刊《HelloGitHub》第 71 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- k8s搭建链路监控:skywalking
skywalking架构及简介 官网:https://github.com/apache/skywalking 简介 Java, .NET Core, NodeJS, PHP, and Python ...
- monowall
https://www.cat-home.org/?action=show&id=158
- Hadoop - HA学习笔记
Hadoop HA概述 工作要点 通过双NameNode消除单点故障 元数据管理方式需要改变:内存中各自保存一份元数据:Edits 日志只有 Active 状态的NameNode节点可以做写操作:两个 ...
- LeetCode-107-二叉树的层序遍历 II
二叉树的层序遍历 II 题目描述:给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例说明请见LeetCode官网. 来源:力扣(Leet ...
- tp5 多文件上传
路由: Route::post('imgs','task/task/uploads'); 控制器代码: // 多文件上传 public function uploads() { //接受参数 $dat ...
- Kotlin笔记小结(For Java Developer)
这篇文章为kotlin学习记录,主要针对的是自己的知识盲区,不适用于新手. 文中所有demo均来自于kotlin官网 类型 整形 Type Size (bits) Min value Max valu ...