1.sleep()方法属于Thread类,wait()方法属于Object类。
2.两个方法都是让线程等待一段时间之后重新运行。但是区别在于sleep()方法不会释放锁,在等待时间里还在占用资源。wait()方法的话释放所,也就把资源让出去了。
3.由于sleep()方法和wait()方法抛出了InterruptedException(中断异常)所以使用这两个方法时抛出该异常或者try/catch()捕获该异常(网上说wait()方法不需要捕获异常个人感觉不对)。
4.sleep()方法里的时间到了之后会自动唤醒线程进入就绪状态,wait()方法通过notify()、notifyAll()函数来唤醒线程。其中notify()随即唤醒一个线程,notifyAll()唤醒全部线程。
5.sleep()方法是静态方法,在哪个线程调用该方法,该线程就去休眠。sleep()方法介绍里指定正在执行的线程进入休眠状态。
6.由于wait()方法涉及到释放对象锁的问题,所以使用wait()方法时必须写在synchronized代码块或者synchronid函数里,要是不写synchronized虽然编译能过但是运行时会抛出java.lang.IllegalMonitorStateException异常。sleep()方法的使用地没有限制。
7.如果想打断线程的暂停状态,调用interrupt()方法线程会立即抛出InterruptedException异常。这里需要注意该线程正在执行普通代码时调用interrupt()方法不会抛出异常。