1 使用对象区别
sleep的调用者是Thread,wait的调用者是所有实例对象
2 使用位置的区别
sleep在任何位置都能使用,而wait/notify/notifyAll需要在"synchronized"同步代码块中使用(wait需要一个监视器monitor)
3 是否释放资源
wait方法释放锁(如果线程拥有某个或某些对象的同步锁,那么在调用了wait()后,这个线程就会释放它持有的所有同步资源,而不限于这个被调用了wait()方法的对象)
sleep方法不释放锁(sleep可以在没有锁的地方使用,佐证了sleep不会释放锁)
synchronized存在位置与monitor
静态方法:Class
静态代码块:Class(也可以是定义的其他Class)
非静态方法:this
非静态代码块:this或者其他对象的实例