1.方法来源区别
wait方法定义在Object上,Thread.sleep()定义在Thread上(这很重要,定义决定作用范围)
2.关于锁和cpu
结论:二者都释放cpu,wait()释放锁,Thread.sleep()不会释放锁.
解释如下:
1.别管是Object.wait()还是Thread.sleep(),都是暂停执行,所以这里都会释放cpu.
2.Object.wait()方法是对象拥有,然后对象锁又是在synchronized同步代码块中使用,所以Object.wait()方法拥有锁的控制权,所以他会释放锁资源.而Thread.sleep()是Thread上的静态方法,所以只能使当前线程睡眠,但是它和锁没有任何关系,所以就没有锁的释放这一问题.
3.作用范围
- Object.wait()方法只能在synchronized快中调用,并且需要和notify和notifyAll配合使用.
- Thread.sleep()是可以在任何上下文调用的,注意是暂停当前的线程
所以就方法而言,Object.wait()主要用在多线程之间的协同工作,Thread.sleep()主要是控制一个线程的执行时间长短.
4 关于异常
Object.wait()方法和Thread.sleep()都 抛出 InterruptedException,并且方法定义为final,
所以方法不能被重写,那么在使用 该方法时就只能 try()catch(){}异常,(为什么说只能try,因为如果不捕获异常,那么也意味着你的方法抛出的异常就只能是InterruptedException,或者它的子类,所以这里一般都是捕获异常并处理异常,可以在catch中抛出其他异常)