1.原理不同。sleep()方法是Thread类中的方法,是线程用来控制自身流程的,他会使线程暂停一段时间,而把执行机会留给其他线程,等到计时时间一到,此线程会自动"苏醒"。wait()方法是Object类中的方法,用于线程间进行通信,这个方***使当前拥有该对象锁的线程等待,直到其他线程调用notify()方法或者notifyAll()方法才“醒来”,同样也可以给他设置一个时间,自动“醒来”。
2.对锁的处理机制不同。sleep()方法的主要作用是让线程暂停执行一段时间,时间一到自动恢复,不涉及线程间的通信,因此,sleep()方法不会释放锁。wait()方法调用后会释放它使用的锁, 从而使线程所在对象中的同步数据可被其他线程使用。
3.使用区域不同。sleep()是Thread的静态方法,可以放在任何地方使用。wait()方法的使用必须放在同步方法或者同步代码块中。
2. 每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同 步。sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3. wait只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
4. sleep必须捕获异常,而wait不需要捕获异常