sleep() 和 wait() 有什么区别?
2 个回答
好运不会眷顾傻瓜。柳青青### sleep() 和 wait() 的区别 1. **所属类**: - `sleep()` 方法属于 `Thread` 类。 - `wait()` 方法属于 `Object` 类。 2. **作用效果**: - `sleep()` 方法暂停线程的执行指定时间,让出 CPU 给其他线程,但不释放对象锁。时间到后,线程自动恢复运行状态。 - `wait()` 方法使线程放弃对象锁,进入对象的等待锁定池。只有在收到 `notify()` 或 `notifyAll()` 方法通知后,线程才会进入锁定池准备获取对象锁并恢复运行。 ### 示例代码 #### sleep() 示例 ```java public class SleepExample { public static void main(String[] args) { Thread thread = new Thread(() -> { try { Thread.sleep(2000); // 暂停执行2秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread resumed after sleep"); }); thread.start(); } } ``` #### wait() 示例 ```java public class WaitExample { private static final Object lock = new Object(); public static void main(String[] args) { Thread thread = new Thread(() -> { synchronized (lock) { try { lock.wait(); // 释放锁并进入等待状态 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread resumed after wait"); } }); thread.start(); try { Thread.sleep(2000); // 等待2秒 } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock) { lock.notify(); // 唤醒等待的线程 } } } ```发布于 2023-09-20 03:05 •IP属地 安徽举报评论收藏
有些东西不需要答案,态度就是答案。路飞sleep():方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。 wait():wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程编辑于 2022-03-26 21:12 •IP属地 北京举报评论收藏
公众号进入网站体验更佳

