Thread类的sleep方法和对象的wait方法都可以让线程暂停执行,但它们在实现机制和使用场景上有显著的区别。
sleep方法是Thread类的静态方法,作用于当前正在执行的线程,不会释放锁,时间到了自动唤醒,通常用于简单的定时任务。而wait方法是Object类的方法,作用于调用该方法的对象,会释放锁,需要其他线程调用notify或notifyAll来唤醒,通常用于线程间的同步和通信。
以下是它们的详细对比:
Thread.sleep 方法
-
作用对象:
sleep方法是Thread类的静态方法,作用于当前正在执行的线程。
-
锁行为:
sleep方法不会释放任何锁或监视器。线程在睡眠期间仍然持有它所获得的锁。
-
唤醒条件:
sleep方法在指定的时间后自动唤醒。线程睡眠的时间是确定的,除非被中断。
-
使用场景:
sleep方法通常用于简单的定时任务,比如延迟执行某个操作。
Object.wait 方法
-
作用对象:
wait方法是Object类的方法,作用于调用该方法的对象。
-
锁行为:
wait方法会释放调用该方法的对象的锁(监视器)。线程在等待期间不持有该对象的锁。
-
唤醒条件:
wait方法需要通过另一个线程调用相同对象的notify或notifyAll方法来唤醒。唤醒的条件是其他线程通知,而不是时间。
-
使用场景:
wait方法通常用于线程间的同步和通信,比如生产者-消费者问题。
示例代码
Thread.sleep 示例
public class SleepExample {
public static void main(String[

最低0.47元/天 解锁文章

1817

被折叠的 条评论
为什么被折叠?



