通过执行wait()和join()两者,执行线程是否进入"等待"状态?

whi*_*hat 2 java multithreading

一个线程有3个状态,但它既没有运行也没有运行: -

  1. 睡眠
  2. 阻止
  3. 等候

当一个线程执行sleep()方法时,它会从运行状态进入SLEEPING状态一段时间由其参数指定(比如几毫秒).

当一个线程正在等待某个其他线程因同步方法或块而获取的对象上的锁定时,该线程将对其进行BLOCKED.

那么,我们可以说一个线程在某个其他线程上执行wait()时进入WAITING状态吗?

在某些线程上调用join()的情况也是如此.

那么,我们可以说wait()(来自java.lang.Object)和join()(来自java.lang.Thread)将线程的状态转换为WAITING吗?

JB *_*zet 5

这在Thread.Statejavadoc中描述:

public static final Thread.State WAITING

等待线程的线程状态.由于调用以下方法之一,线程处于等待状态:

    Object.wait with no timeout
    Thread.join with no timeout
    LockSupport.park
Run Code Online (Sandbox Code Playgroud)

处于等待状态的线程正在等待另一个线程执行特定操作.例如,在对象上调用Object.wait()的线程正在等待另一个线程在该对象上调用Object.notify()或Object.notifyAll().调用Thread.join()的线程正在等待指定的线程终止.