Java 线程

Java 线程的状态

  1. 初始化状态
  2. 运行状态
  3. 阻塞状态
  4. 有限时等待状态
  5. 无限时等待状态
  6. 终止状态

初始化状态到运行状态的转换

调用 start()

运行状态到阻塞状态的转换

only 线程等待 synchronized 的隐式锁

运行状态到无限时等待状态的转换

  1. 在锁代码中调用 wait()
  2. 调用 Thread.join() 方法, 等待目标线程执行完毕
  3. 调用 LockSupport.park() 方法. 并发包的实现

运行状态到有限时间等待状态的转换

  1. 调用 Thread.sleep(long millis)
  2. 在锁代码中调用 wait(long millis)
  3. 调用 Thread.join(long millis)
  4. 调用 LockSupport.parkNanos(Object blocker, long deadline)
  5. 调用 LockSupport.parkUntil(long deadline)

运行状态到终止状态的转换

  1. 线程执行结束
  2. 线程报错抛出异常
  3. interrupt()方法 (interrupt() 是设置中断标志, 被中断线程捕获这个异常, 会导致中断标志被重置)