一、相同点:
都可以实现线程的“暂停”,即:暂时停止正在执行的操作。
二、不同点:
1.所属类不同:
sleep()来自java.lang.Thread
wait()来自java.lang.Object
2.对资源的锁定不同:
sleep()没有释放锁
wait()释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。
3.使用范围不同:
sleep()可以在任何地方使用
wait(),notify()和notifyAll()只能在同步方法或同步代码块中使用
4.可能产生的异常不同:
sleep()必须捕获异常
wait(),notify()和notifyAll()不需要捕获异常
5.方法的定义类型不同:
sleep()方法是一个静态方法,也就是说他只对当前对象有效,想通过threadA.sleep()让threadA对象进入sleep是行不通的。它只会是使当前线程被sleep 而不是threadA线程。
wait()属于Object的成员方法,一旦一个对象调用了wait方法,必须要采用notify()和notifyAll()方法才能唤醒该进程.如果线程拥有某个或某些对象的同步锁,那么在调用了wait()后,这个线程就会释放它持有的所有同步资源,使得这些资源可以被其他线程对象访问。