sleep () 和 wait () 有什么区别?
在Java中,sleep()
和 wait()
是两个用于处理多线程的方法,它们具有不同的作用和用途。
sleep()
:sleep()
是Thread
类的一个静态方法,用于暂停当前线程的执行一段指定的时间。它会阻塞当前线程,不会让其他线程获得执行机会,直到指定的时间过去。sleep()
可以用于引入时间延迟,但不涉及线程间的通信或协调。示例:
try { Thread.sleep(1000); // 暂停当前线程1秒钟 } catch (InterruptedException e) { // 处理中断异常 }
wait()
:wait()
是Object
类的方法,在多线程编程中用于实现线程之间的协调和通信。调用wait()
方法会让当前线程进入等待状态,并释放对象的锁,直到其他线程调用相同对象的notify()
或notifyAll()
方法唤醒等待的线程。通常与锁(synchronized)一起使用,用于避免竞态条件和实现线程间的协调。示例:
synchronized (sharedObject) {try {sharedObject.wait(); // 当前线程进入等待状态 } catch (InterruptedException e) { // 处理中断异常 }}
总结区别:
sleep()
是Thread
类的方法,用于暂停当前线程的执行一段时间,不涉及通信或协调,不释放锁。wait()
是Object
类的方法,用于使当前线程等待并释放锁,直到其他线程唤醒,通常与锁一起使用,用于线程间的通信和协调。