前言: 最近在做一套题的时候,遇到了这个知识点,所以准备详细整理一下。 区别 sleep方法是Thread类的静态方法、wait()是Object超类的成员方法。 sleep方法导致了程序暂停执行指定的时
前言:
最近在做一套题的时候,遇到了这个知识点,所以准备详细整理一下。
区别
而当调用wait方法的时候,线程会自动释放对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备。
共同点
如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait()、sleep ()、join(),则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。
需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()、sleep()、join()后,就会立刻抛出InterruptedException 。