线程的几种状态(详细)

线程状态 解释
NEW 初始状态,线程被构建,还没有调用start()方法
RUUNABLE 运行状态,就绪(执行了start方法)和运行(就绪状态线程获得cpu执行权,执行run方法)两种状态笼统的称作 运行中
BLOCKED 阻塞状态,表示线程阻塞于锁
WAITING 等待状态,需要等待其他线程
TIME_WAITING 超时等待状态,它可以在指定的时间自行返回
TERMINATED 终止状态,线程执行完毕

线程的几种状态(详细)_第1张图片
线程创建之后,调用start()方法开始运行。当线程执行wait()方法之 后,线程进入等待状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,也就是超时时间到达时将会返回到运行状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到阻塞状态。线程在执行Runnable的run()方法之后将会进入到终止状态。

1、新建状态

使用new关键字创建了一个线程

2、就绪状态

线程对象调用start()方法

3、运行状态

处于就绪状态的线程获得了CPU执行权,开始执行run()方法

4、阻塞状态

线程因某种状态放弃了CPU执行权(让出cpu时间片),暂时停止运行,直到线程进入可运行状态(runnable)状态才有机会获取cpu时间片转到运行状态

  • 等待阻塞:运行中的线程执行wait()方法,JVM将其放入等待队列
  • 同步阻塞:运行中的线程在获取对象同步锁时,若该同步锁被别的线程占用,JVM会将其放入锁池
  • 其他阻塞:运行中的线程调用sleep()或join()方法,或者发出I/O请求时。JVM会将其设置为阻塞状态

5、线程死亡

线程结束

  • 正常结束:run()或call()方法执行完成,线程正常结束
  • 异常结束:线程抛出异常或error
  • 调用线程stop()方法结束------(该方法容易导致死锁)

你可能感兴趣的:(Java并发编程,多线程,并发编程,thread)