sleep()和wait()的区别

 作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值