做网站工作内容,市场营销说白了就是干什么的,wordpress怎么自动生成内链,长沙传媒公司有哪些Java中sleep() 和 wait() 有什么区别#xff1f;
sleep() 和 wait() 是两个在 Java 中用于线程控制的方法#xff0c;它们有一些重要的区别#xff1a; 关联对象#xff1a; sleep() 是 Thread 类的静态方法#xff0c;它让当前线程休眠指定的时间#xff0c;不释放对象…Java中sleep() 和 wait() 有什么区别
sleep() 和 wait() 是两个在 Java 中用于线程控制的方法它们有一些重要的区别 关联对象 sleep() 是 Thread 类的静态方法它让当前线程休眠指定的时间不释放对象锁。 wait() 是 Object 类的方法它用于在同步块内暂时释放对象的锁并等待其他线程通知或中断。 调用方式 sleep() 可以直接通过 Thread.sleep() 调用。 wait() 必须在同步块synchronized block内调用因为它会释放对象锁而在同步块外调用会导致 IllegalMonitorStateException 异常。 使用场景 sleep() 主要用于线程间的时间调度让线程休眠一段时间。 wait() 主要用于线程间的协作允许一个线程等待另一个线程通知它。
下面是一个简单的示例演示了 sleep() 和 wait() 的用法
public class SleepWaitExample {public static void main(String[] args) {final Object lock new Object();// sleep 示例Thread sleepThread new Thread(() - {synchronized (lock) {System.out.println(SleepThread is going to sleep...);try {Thread.sleep(2000); // 休眠2秒} catch (InterruptedException e) {e.printStackTrace();}System.out.println(SleepThread has awakened.);}});// wait 示例Thread waitThread new Thread(() - {synchronized (lock) {System.out.println(WaitThread is waiting...);try {lock.wait(); // 等待被唤醒} catch (InterruptedException e) {e.printStackTrace();}System.out.println(WaitThread has been notified.);}});sleepThread.start();waitThread.start();try {Thread.sleep(1000); // 等待一秒确保 sleepThread 和 waitThread 同时执行} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock) {System.out.println(Main thread notifies waiting thread.);lock.notify(); // 唤醒 waitThread}}
}在上述示例中SleepThread 使用 Thread.sleep() 进行休眠而 WaitThread 使用 lock.wait() 进行等待。主线程在一秒后唤醒了 WaitThread。这展示了 sleep() 用于时间调度而 wait() 用于线程协作。