【872、阻塞或者说sleep和wait有什么区别?】

67 阅读1分钟

有以下区别:

  1. 阻塞(Blocking):

    • 阻塞是一种通用的术语,用于描述线程的状态,即线程在某些条件下被暂停执行,直到条件满足为止。
    • 阻塞可以发生在多种情况下,包括等待输入/输出、等待锁、等待信号等。
    • 阻塞是一种线程状态,而不是一个特定的方法或操作。
  2. sleep:

    • sleep 是 Thread 类的一个静态方法,用于使当前线程暂停执行一段指定的时间(以毫秒为单位)。
    • sleep 方法主要用于线程休眠,不会释放任何锁资源。
    • sleep 方法通常用于模拟时间的流逝或者在一定时间间隔内执行某些操作。
  3. wait:

    • wait 是 Object 类的一个方法,用于线程间的协调和通信。它必须在同步块或同步方法中调用,否则会抛出 IllegalMonitorStateException。
    • 当线程调用 wait 方法时,它会释放锁并进入等待状态,直到其他线程调用相同对象的 notify 或 notifyAll 方法来唤醒它。
    • wait 方法通常用于线程之间的协作,允许线程等待特定条件的发生。

总结:

  • 阻塞是一种通用的线程状态,可以发生在不同的情况下。
  • sleep 用于使线程休眠一段时间,不释放锁资源。
  • wait 用于线程之间的协调和通信,在等待时会释放锁资源,直到被唤醒。