在Java中,wait
和sleep
是两种不同的方法,用于处理线程的等待和休眠,但它们的用途和工作原理有很大的区别。
wait() 方法:
wait()
方法是Object
类中的方法,因此任何对象都可以调用。wait()
方法用于线程间的协作,它会使当前线程释放对象锁,并进入等待状态。这个方法通常与synchronized
关键字一起使用,以确保线程在等待状态时不会被其他线程干扰。notify()
或notifyAll()
方法唤醒。被唤醒的线程将尝试重新获得对象锁,并继续执行。synchronized (sharedObject) {
while (conditionIsNotMet) {
sharedObject.wait();
}
// 执行线程需要的操作
}
sleep() 方法:
sleep()
方法是Thread
类的静态方法,用于让当前线程休眠一段指定的时间。sleep()
方法不会释放对象锁,即使在同步块中调用,线程也不会放弃锁。sleep()
时要注意异常处理,因为它可能抛出InterruptedException
。try {
Thread.sleep(1000); // 休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
总的来说,wait()
和sleep()
都可以用于线程的等待,但它们的应用场景和使用方式有所不同。wait()
主要用于多线程之间的协作,而sleep()
主要用于线程的暂停,让出CPU的执行时间。