有以下区别:
-
阻塞(Blocking):
- 阻塞是一种通用的术语,用于描述线程的状态,即线程在某些条件下被暂停执行,直到条件满足为止。
- 阻塞可以发生在多种情况下,包括等待输入/输出、等待锁、等待信号等。
- 阻塞是一种线程状态,而不是一个特定的方法或操作。
-
sleep:
- sleep 是 Thread 类的一个静态方法,用于使当前线程暂停执行一段指定的时间(以毫秒为单位)。
- sleep 方法主要用于线程休眠,不会释放任何锁资源。
- sleep 方法通常用于模拟时间的流逝或者在一定时间间隔内执行某些操作。
-
wait:
- wait 是 Object 类的一个方法,用于线程间的协调和通信。它必须在同步块或同步方法中调用,否则会抛出 IllegalMonitorStateException。
- 当线程调用 wait 方法时,它会释放锁并进入等待状态,直到其他线程调用相同对象的 notify 或 notifyAll 方法来唤醒它。
- wait 方法通常用于线程之间的协作,允许线程等待特定条件的发生。
总结:
- 阻塞是一种通用的线程状态,可以发生在不同的情况下。
- sleep 用于使线程休眠一段时间,不释放锁资源。
- wait 用于线程之间的协调和通信,在等待时会释放锁资源,直到被唤醒。