专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java中wait和sleep的区别

Java中wait和sleep的区别

更新时间:2022-09-22 10:13:27 来源:动力节点 浏览734次

了解Java 中 sleep() 和 wait() 方法之间的区别。了解何时使用哪种方法以及它们在Java 并发中带来的影响。

1. Java sleep() 和 wait() – 讨论

sleep()是一种用于暂停进程几秒钟或我们想要的时间的方法。但是在wait()notify()方法的情况下,线程进入等待状态并且在我们调用or之前它不会自动返回notifyAll()。

主要区别在于,在等待时释放锁或wait()监视器sleep()而不释放锁或监视器。wait()用于线程间通信,而sleep()通常用于引入执行暂停。

Thread.sleep()将当前线程发送到“不可运行”状态一段时间。线程保留它已获取的监视器——即,如果线程当前位于synchronized块或方法中,则没有其他线程可以进入该块或方法。如果另一个线程调用t.interrupt(). 它会唤醒睡眠线程。

Whilesleep()是一种static方法,这意味着它始终会影响当前线程(正在执行 sleep 方法的线程)。一个常见的错误是调用t.sleep()where tis a different thread;即使这样,睡眠的也是当前线程,而不是t线程。

2. Java sleep() 和 wait() – 示例

睡眠()示例
synchronized(LOCK) {   
    Thread.sleep(1000); // LOCK is held
}
等待()示例
synchronized(LOCK) 
{   
    LOCK.wait(); // LOCK is not held
}

3. Java sleep() vs wait() – 总结

让我们对以上所有要点进行简单的分类以记住。

(1)调用的方法

wait()– 调用一个对象;当前线程必须在锁对象上同步。

sleep()– 调用线程;总是当前正在执行的线程。

(2)同步的

wait()– 当同步多个线程一个一个访问同一个对象时。

sleep()– 当同步多个线程等待休眠线程的休眠时。

(3)锁定持续时间

wait()– 释放锁以使其他对象有机会执行。

sleep()– 如果指定超时或有人中断,至少保持锁定 t 次。

(4)唤醒状态

wait()– 直到从对象调用 notify()、notifyAll()

sleep()– 直到至少时间到期或调用中断()。

(5)用法

sleep()– 用于时间同步

wait()– 用于多线程同步。

以上就是关于“Java中wait和sleep的区别”介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下本站的Java多线程编程,里面还有更丰富的知识等着大家去学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>