作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
sleep()
和 wait()
两个方法都是用来暂停线程,具备同样的功能,但是他们之间还是存在蛮大的区别的。
区别一:所属类不同
sleep()
是Thread
类的一个静态方法。位于Thread
中,强调了它是线程中的一部分,代表了线程的一种行为方式,不涉及线程间的交互。wait()
是Object
类的一个方法。在 Java 中一切皆对象,而所有对象都可以作为一个监视器(monitor),将wait()
放在Object
类中,体现的是面向对象设计的原则,是一种线程间通过共享对象进行通信的机制。
区别二:使用语法不同
sleep()
是 Thread
类的一个静态方法,可以随时随地用。而 wait()
必须配合 synchronized 一起使用,不然在运行时就会抛出 IllegalMonitorStateException 的异常,如下:
public class WaitTest {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(1000);
System.out.println("执行 sleep(1000) 后...");
Object lock = new Object();
lock.wait();
}
}