sleep()方法和wait()方法的异同(面试题)
相同点:
- 执行这两个方法都会使我们的线程进入阻塞状态
- 调用这两个方法都会抛出异常,而且抛出的异常类型也相同(InterruptedException)
不同点:
- 声明的位置不同:
- sleep()方法声明在java.lang.Thread类中
- wait()方法声明在java.lang.Object类中
- 调用的范围不同:
- sleep()方法可以在任何需要的场景下调用
- wait()方法必须使用在同步代码块或者同步方法中
- 关于是否释放同步监视器(前提是都声明在同步代码块或者同步方法中,因为只有我们声明在同步监视器中,才会设计同步监视器的释放)
- sleep()方法不会释放同步监视器
- wait()方法会释放同步监视器
关于比较问题的归纳:(一般就是有两类)
- 长得像的
- throws和throw , final和finally , 方法重写和方法重载 , String与StringBuffer和StringBuilder
- 长得不像但是使用上有相似之处的
- sleep()和wait()方法