[Java]wait和sleep区别

sleep

        public static void sleep(long time) 当前线程 休眠time毫秒后 醒来继续执行

栗子

    public static void main(String[] args) throws InterruptedException {
        //throws InterruptedException	抛出异常
        for (int i = 0; i < 5; i++) {
            Thread.sleep(100);		//.sleep(要休眠的毫秒数)	写这个报异常	alt enter
            System.out.println(i);
        }
    }

wait

         void  wait()    其他线程调用此对象的方法前,使当前线程等待。
         void  wait(long time)  在time时间内 若有唤醒则唤醒 否则时间到后        自己醒来

栗子

public static void main(String[] args) throws InterruptedException {
    Object j = new Object();
    new Thread(new Runnable() {
        @Override
        public void run() {
            synchronized (j) {
                System.out.println("开始等待");
                try {
                    j.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();

    Thread.sleep(5000);
    //唤醒正在等待的线程
    synchronized (j) {
        System.javaout.println("开始唤醒");
        j.notify();
    }
}

wait和sleep区别

sleep是Thread类的静态方法

休眠到时间后自动醒来执行 在同步内和同步外都可以使用

注意 sleep方法 在同步中使用 不会释放锁 ​

wait是Object类的方法

必须由锁对象调用 也就是必须在同步内使用 线程遇到wait方法会释放锁对象 ​ 可以是其他线程 使用notfiy唤醒 也可以使用重载方法 时间到后自己醒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值