java object的wait和Thread的sleep方法区别
来源:互联网 发布:mac怎么进入恢复模式 编辑:程序博客网 时间:2024/05/20 09:22
一、这里先来介绍下object的wait、notify和notify all方法
wait、notify和notifyAll方法是Object类的final native方法。所以这些方法不能被子类重写,Object类是所有类的超类,因此在程序中有以下三种形式调用wait等方法。
wait();//方式1:this.wait();//方式2:super.wait();//方式3
void notifyAll()
解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
void notify()
随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
void wait()
导致线程进入等待状态,直到它被其他线程通过notify()或者notifyAll唤醒。该方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
void wait(long millis)和void wait(long millis,int nanos)
导致线程进入等待状态直到它被通知或者经过指定的时间。这些方法只能在同步方法中调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
Object.wait()和Object.notify()和Object.notifyall()必须写在synchronized方法内部或者synchronized块内部,这是因为:这几个方法要求当前正在运行object.wait()方法的线程拥有object的对象锁。即使你确实知道当前上下文线程确实拥有了对象锁,也不能将object.wait()这样的语句写在当前上下文中。
二、讲一下这两者之间的差别
1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。
3、使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
- java object的wait和Thread的sleep方法区别
- java object的wait和Thread的sleep方法区别
- java object的wait和Thread的sleep方法区别
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法的区别--有道笔记整理
- java.lang.Thread.sleep()方法和java.lang.Object.wait()方法之间的区别
- Java Thread sleep和wait的区别
- Java Thread sleep和wait的区别
- java之Thread.sleep(long)与object.wait()/object.wait(long)的区别
- Thread的sleep方法和wait方法的区别
- Java Thread 的 sleep() 和 wait() 的区别
- 【Java之多线程(二)】(***重要***)Java多线程中常见方法的区别,如object.wait()和Thread.sleep()的区别等
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程) 详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- Java Thread(线程)案例详解sleep和wait的区别
- 在glassfish4中配置一个db2的pool
- new,delete,malloc,free的区别?
- 面试:机器学习--推荐算法
- 【javascript高级程序设计】读书摘录2 第五章、引用类型
- 在XSLT中输出内容带有CDATA的XML节点
- java object的wait和Thread的sleep方法区别
- 我的总结-动态规划(DP)
- 【DP】【HNOI2004】打鼹鼠
- Spring MVC 整合 freamarker的全过程
- A^X mod P 山东省赛,打表求解
- A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效。
- bug回顾
- Hbase(1):HBase简介
- 海量数据处理算法之Bloom Filter