java 多线程中的sleep()与wait()方法的对比
来源:互联网 发布:sqlserver 数据挖掘 编辑:程序博客网 时间:2024/06/06 04:28
sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会释放对象锁。
wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
1、这两个方法来自不同的类分别是Thread和Object
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
- synchronized(x){
- x.notify()
- //或者wait()
- }
4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
sleep方法属于Thread类中方法,表示让一个线程进入睡眠状态,等待一定的时间之后,自动醒来进入到可运行状态,不会马上进入运行状态,因为线程调度机制恢复线程的运行也需要时间,一个线程对象调用了sleep方法之后,并不会释放他所持有的所有对象锁,所以也就不会影响其他进程对象的运行。但在sleep的过程中过程中有可能被其他对象调用它的interrupt(),产生InterruptedException异常,如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED状态,如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有finally语句块)以及以后的代码。
注意sleep()方法是一个静态方法,也就是说他只对当前对象有效,通过t.sleep()让t对象进入sleep,这样的做法是错误的,它只会是使当前线程被sleep 而不是t线程
wait属于Object的成员方法,一旦一个对象调用了wait方法,必须要采用notify()和notifyAll()方法唤醒该进程;如果线程拥有某个或某些对象的同步锁,那么在调用了wait()后,这个线程就会释放它持有的所有同步资源,而不限于这个被调用了wait()方法的对象。wait()方法也同样会在wait的过程中有可能被其他对象调用interrupt()方法而产生
- java 多线程中的sleep()与wait()方法的对比
- java多线程中的sleep()方法与wait()方法的区别
- java中的多线程中wait和sleep方法的区别
- Java中的多线程:sleep, wait, join 与 interrupt()的关系
- java多线程 wait与sleep的区别
- Java中的sleep()与wait()
- 浅谈Java多线程中的Thread.sleep()和wait()方法的区别
- 关于java多线程中的wait和sleep方法和临界区的概念
- java多线程中wait()和sleep()方法的区别
- Java多线程之interrupt()方法与sleep(),join(),wait()的关系
- Java sleep wait 在多线程中的区别
- Java多线程中Sleep与Wait的区别
- Java多线程中Sleep与Wait的区别
- Java多线程中Sleep与Wait的区别
- Java多线程中Sleep与Wait的区别
- Java多线程中Sleep与Wait的区别
- Java多线程中Sleep与Wait的区别?
- Java多线程中Sleep与Wait的区别
- 软件构造 课堂笔记1
- css实现平角切角和弧形切角效果
- ubuntu16.04 ram Kylin 4.0-2SP1 更新源
- Ubuntu,Windows双系统安装注意要点
- vagrant 快速入门
- java 多线程中的sleep()与wait()方法的对比
- GLSL语言基础
- Unity http请求封装(www)
- 接口
- js中使字符串首字母大写采用的姿势
- 通过代理实现Java代码访问指定URL
- 计算机10大基础知识点(一)
- 代码整洁_错误处理
- 洛谷 P1876 开灯