更新时间:2022-09-22 10:13:27 来源:极悦 浏览929次
了解Java 中 sleep() 和 wait() 方法之间的区别。了解何时使用哪种方法以及它们在Java 并发中带来的影响。
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线程。
睡眠()示例
synchronized(LOCK) {
Thread.sleep(1000); // LOCK is held
}
等待()示例
synchronized(LOCK)
{
LOCK.wait(); // LOCK is not held
}
让我们对以上所有要点进行简单的分类以记住。
(1)调用的方法
wait()– 调用一个对象;当前线程必须在锁对象上同步。
sleep()– 调用线程;总是当前正在执行的线程。
(2)同步的
wait()– 当同步多个线程一个一个访问同一个对象时。
sleep()– 当同步多个线程等待休眠线程的休眠时。
(3)锁定持续时间
wait()– 释放锁以使其他对象有机会执行。
sleep()– 如果指定超时或有人中断,至少保持锁定 t 次。
(4)唤醒状态
wait()– 直到从对象调用 notify()、notifyAll()
sleep()– 直到至少时间到期或调用中断()。
(5)用法
sleep()– 用于时间同步
wait()– 用于多线程同步。
以上就是关于“Java中wait和sleep的区别”介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下本站的Java多线程编程,里面还有更丰富的知识等着大家去学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习