Java中的sleep()和wait()函数都可以挂起当前线程,使线程休眠,但实现方式不一样,如下:
1.首先sleep()是Thread类的方法静态方法,需要通过Thread类调用,Thread.sleep()。而wait()和notify()是Object类中的实例方法,因为java所有类都继承于object类,所有类中都可以使用。
2.wait(),和notify()必须用在synchronized代码块中调用,否则会抛出异常(因为wait()需要释放对象锁,如果不在synchronized代码块中不能保证拥有对象锁)。
3.当在synchronized代码块中使用sleep(),线程会被挂起,但不会释放对象锁,所以如果有其他线程等待执行该synchronized代码块,一直会被阻塞,等待该线程被唤醒释放对象锁。
4.当在synchronized代码块中使用wait(),线程会被挂起,需要notify()唤醒,但该线程会释放对象锁,所以其他线程可以执行该synchronized代码块。
关于synchronized用法这篇文章讲得很好,很简洁http://blog.csdn.net/a999wt/article/details/10664813