Java之sleep和wait的区别
这个问题在面试线程方面的知识时,基本上属于必问的问题。因此这里有必要做一个较为详细的总结。
区别一
首先需要明白的是这两个方法根本来自不同的类,sleep来自Thread,wait来自Object类。
sleep是Thread提供的一个静态方法,该方法出现在那个线程中,那个线程就"睡觉",并非是
调用该方法的线程睡觉,例如a线程中调用线程b.sleep(),a线程睡觉。
区别二
最为主要的区别是sleep方法没有释放“锁”,而wait方法释放了"锁"不然的话就会形成死锁了。
sleep是不让出系统资源的;wait是线程交互时,如果线程a对一个同步对象x发出一个wait
调用该线程会进入线程等待池等待,需要等其他线程调用notify/notifyAll唤醒,或者指定的时间过后
自动唤醒。
这里还需明白一点的就是无论是sleep设置的时间到了,还是wait之后被唤醒了,线程并
不一定立即恢复执行,而是触发"操作系统重新进行一次CPU竞争"。
区别三
使用范围不一样(将这作为区别略微牵强了)
wait、notify/notifyAll必须在同步控制块、同步方法里面使用。而sleep的使用在任意地方。
synchronized(x){
x.notify()
//或者wait()
}
区别四
代码表现上sleep必须捕获异常,而wait不需捕获异常。
Java之sleep和wait的区别的更多相关文章
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
- Java abstract class 和 interface 的区别
Java abstract class 和 interface 的区别 1. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制 2. 以Door的抽象概 ...
- java虚拟机和Dalvik虚拟机的区别
java虚拟机和Dalvik虚拟机的区别: java虚拟机Dalvik虚拟机 java虚拟机基于栈. 基于栈的机器必须使用指令来载入和操作栈上数据,所需指令更多更多dalvik虚拟机是基于寄存器的 j ...
- Java中this与super的区别【6】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...
- java 字节流和字符流的区别 转载
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- Java中堆和栈的区别(转)
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- java 字节流和字符流的区别
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- Java空字符串与null的区别和判断字符串是否为空的方法
Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...
随机推荐
- iOS开发——https+证书
由于公司项目的需要,经过调研后,已成功. 同事已把此问题写成博客<[加密解密]HTTPS>,我就直接转用了 附带链接如下: http://www.jianshu.com/p/8351917 ...
- iOS自学之NSOperation、NSOperationQueue、Background
iOS中多线程编程主要分为NSThread.NSOperation和GCD,今天主要记录下自己在学习NSOperation中的点滴-如有不对的地方帮忙指出下,PS:人生第一次写blog,各位看官请轻虐 ...
- 【制作镜像Win*】特殊配置
下载disk.config: wget http://10.254.3.75/images/configdrive/disk.config 修改libvirt.xml,更换cdrom为disk.con ...
- NOIP201501&&02
NOIP201501金币 试题描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天) ,每天收到两枚金币:之后三天(第四.五.六天) ,每天收到三枚金币:之后 ...
- 把URL传递参数转变成自定义实体方法
先定义下要获取的实体: public class InputClass { public long Id { get; set; } public int Status { get; set; } p ...
- Java security MD5加密算法
利用java.security对字符串进行MD5加密: import java.security.MessageDigest; import java.security.NoSuchAlgorithm ...
- JS判断是否微信浏览器
JS判断是否微信浏览器 function isWeixinBrowser(){ var ua = navigator.userAgent.toLowerCase(); return (/microme ...
- php curl request
/** * @desc curl request请求 * @date 2016-12-07 16:26:55 * * @param $arguments * * @return bool|mixed ...
- 10 Best Responsive HTML5 Frameworks and Tools
http://designinstruct.com/roundups/html5-frameworks/
- 告诉你KVC的一切-b
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...