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(