线程的5种状态
1.new 新建状态
当程序使用new关键字,创建了一个线程之后,该线程就处于新建状态,此时线程还未启动.
当调用start()方法,线程启动,进入到runnable状态
2.runnable 可运行状态(就绪状态)
线程准备就绪,等待获取cpu
3.running状态 运行(正在运行)状态
a.假设该线程获取了cpu,则进入到running状态,开始执行线程体(run方法中的内容)
b.注意点:如果系统只有一个cpu核心(单核),那么在同一时间点上只有一个线程处于running状态
如果系统有两个cpu核心(两核),那么在同一时间点上可以有两个线程处于running状态
假设当线程数大于处理器数时,依然会是多条线程轮换运行
c.当一条线程开始运行的时候,如果不是一瞬间完成那么不可能一直处于running状态(走走停停,系统将时间片均匀分给各个线程)
线程在执行的过程中会被中断,目的是为了让其他线程获得执行的机会
d.调用yield() 可以使线程有running状态进入到runnable状态(可运行状态)
4.block 阻塞(挂起)状态
a.线程调用了sleep()主动的放弃所占的cpu资源
b.线程调用了阻塞式io方法,在该方法返回前,该线程被阻塞
c.当线程被阻塞的时,其他线程就获得了执行的机会,当阻塞结束时,该线程会进入到runnable状态 ,
而不是直接进入running状态
5.dead 死亡(结束)状态
当线程的run()执行结束时,线程进入dead,不要试图对一个已经死亡的线程调用start()会出现一个异常