wait和sleep区别

132 阅读1分钟

waitsleep 用于线程控制:

  1. 使用的位置:

    • wait 方法是 Object 类的方法,因此它可以在任何对象上调用,前提是线程必须拥有该对象的锁。通常,wait 被用于线程间的协作。
    • sleep 方法是 Thread 类的静态方法,可以直接在任何地方使用,不需要拥有对象的锁。通常,sleep 被用于线程的时间暂停。
  2. 锁的释放:

    • 在调用 wait 方法后,线程会释放对象的锁,使得其他线程可以获得这个对象的锁并执行。当等待条件满足时,线程可以被唤醒。
    • 在调用 sleep 方法后,线程仍然持有对象的锁,其他线程无法获取锁。
  3. 异常处理:

    • wait 方法需要在同步块或同步方法中使用,通常结合 try-catch 块使用,以处理中断异常和超时等待。
    • sleep 方法也需要处理中断异常,因为在睡眠期间线程可以被其他线程中断。
  4. 调用方式:

    • wait 方法通常与 notifynotifyAll 方法一起使用,以实现线程间的通信和协作。
    • sleep 方法通常用于在程序执行中暂停执行一段时间。

总体而言,wait 主要用于线程间的协作,而 sleep 主要用于线程的时间暂停。