Thread wait和sleep的区别
这两者的施加者是有本质区别的.
sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制.
而wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",也是 thisOBJ.wait(),这里的暂停是阻塞,还是"点火->烧水->煮饭",thisOBJ就好比一个监督我的人站在我旁边,本来该线 程应该执行1后执行2,再执行3,而在2处被那个对象喊暂停,那么我就会一直等在这里而不执行3,但正个流程并没有结束,我一直想去煮饭,但还没被允许, 直到那个对象在某个地方说"通知暂停的线程启动!",也就是thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处 继续执行.
其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题
在java.lang.Thread类中,提供了sleep(),
而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程
sleep()可以将一个线程睡眠,参数可以指定一个时间。
而wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
wait有两种形式wait()和wait(milliseconds).
sleep和wait的区别有:
1,这两个方法来自不同的类分别是Thread和Object
2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
Thread wait和sleep的区别相关推荐
- c++11中thread join和detach的区别
线程状态: 在一个线程的生存期内,可以在多种状态之间转换,不同的操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状态还可以包含多个子状态,但大体来说,如下几种状态是通用的: 1)就绪:参与 ...
- Thread.currentThread()与this的区别
在自定义线程类时,如果线程类是继承java.lang.Thread的话,那么线程类就可以使用this关键字去调用继承自父类Thread的方法,this就是当前的对象. 另一方面,Thread.curr ...
- Handler、Thread、HandlerThread三者的区别
摘取重点: HandlerThread对象start后可以获得其Looper对象,并且使用这个Looper对象实例Handler,之后Handler就可以运行在其他线程中了. public class ...
- 知识点干货--聊一聊Android中Service与Thread的区别
古语说得好:"一寸光阴一寸金,寸金难买寸光阴."一寸光阴和一寸长的黄金一样昂贵,而一寸长的黄金却难以买到一寸光阴.比喻时间十分宝贵.此语句出自唐朝王贞白的<白鹿洞二首> ...
- 全局事务与本地事务的区别应用(从代码方面来探讨的)
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程.资源管理器一般使用 XA 二阶段提交协议与"企业信息系统"(EIS) 或数据库进行交互. 本地事务:在单个 EIS ...
- 多线程与单线程的区别
单线程(Thread)与多线程的区别 首先了解一下cpu,随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐渐成为瓶 ...
- SurfaceView和View的区别
前言:努力,离目标的五分之一又近了一步. 1.view view在api中的结构 java.lang.Object android.view.View 直接子类: AnalogClock, Ima ...
- 关于 Thread.currentThread()
关于 Thread.currentThread() currentThread() 到底是什么? 其实currentThread() 只是Thread 的一个静态方法.返回的正是执行当前代码指令的线 ...
- Thread.currentThread()、isAlive()、Thread.sleep()的使用
1.Thread.currentThread()方法: 返回当前正在运行的线程 一个简单的例子: MyThread_7.Java类的构造函数是被main线程调用的,而run()方法是被名为Thread ...
最新文章
- C++的集成开发环境(IDE)
- 搜索引擎技术——全文检索基础原理
- 聊聊Synchronized
- libsvm 使用介绍
- C++基础-内存管理
- java空间租用_java影片租赁平台
- linux下单独安装oracle12.1客户端
- python异步_Python中的异步编程
- 如何在一周内上线50个用户增长策略
- Python连接MySQL数据库之pymysql模块使用
- python公众号留言功能_Python实现的微信公众号群发图片与文本消息功能实例详解...
- (转)Android调试运行时错误之Process XXX terminated by signal (11)
- 推荐FPGA入门书籍
- Html5 通用布局方式
- Git基础(18):如何使用GitLab
- NLPCC2013中文微博细粒度情感识别(二)
- Docker-Windows安装、升级、卸载
- 微信公众平台 html,微信公众平台.html
- 3.8 使用切片工具制作网页 [Ps教程]
- Sigar获取系统信息
热门文章
- Cartographer分枝定界算法比喻理解
- 青岛医院计算机招聘试题及答案,2020青岛市妇女儿童医院招聘试题及答案解析...
- SVM详解(三)支持向量机使用核技巧
- mysql字段类型详解_MySQL字段类型详解
- 《初始化和反初始化》
- Unity调用USB摄像头开启与关闭
- RecycleView 和Viewpager2
- 微信小程序获取手机号码第一次失败第二次成功的解决方案
- 微信公众号之微信支付(V3版)jsp页面jsapi统一下单调启支付(java版)
- Caspase-1活性分析:艾美捷FAM-FLICA试剂盒解决方案