java线程的五种状态,即线程的生命周期
1.开始状态 :
当使用new 关键字,创建出一个Thread类或其子类的时候,我们都知道,这个时候会在堆空间分配空间,这个时候线程实例 开始创建,即进入开始状态。
2.可运行状态/就绪状态:
当调用创建出来的Thread实例的start()方法的时候,我的理解,该线程已经启动,即告诉虚拟机,我现在拥有了使用CPU时间片段的权利,这个时候和别的线程一起等待CPU调度。
3.运行状态:
经过就绪状态的等待,终于等到了CPU时间段的使用,那在这段有CPU使用权的时间,这个线程要做什么呢,开始运行run()方法
4.阻塞状态:
阻塞状态是该线程因为一些原因放弃了CPU使用权的原因,转而进去就绪状态,只有在就绪状态进行等待之后重新获取CPU使用权后才能再次进入运行状态
阻塞情况分为三种:
1)等待阻塞:该线程运行wait()方法之后,JVM会将该线程放入等待池中。
2)同步阻塞:该线程获取对象的同步锁的时候,这个对象的同步锁正在被其他线程占用,这个时候JVM会将该线程放入锁池中。
3)其他阻塞:该线程运行sleep()方法,或者其他线程在该线程调用join()方法的时候,JVM将该线程置为阻塞状态
5.死亡状态:
线程执行完或者因为异常结束run()方法,即进入死亡状态,生命周期结束。