状态的笼统种类
1>就绪状态
2>阻塞状态
java中的线程细分状态
NEW状态
Thread对象创建好了,但是还没有调用start方法在系统中创建线程.
就是像图中红圈中的,已经创建好了t1和t2,但是还没进行下一步的t1.start();这一步,就是NEW状态
TERMINATED
这个是Thread对象仍然存在,但是系统内部的线程已经执行完毕了
RUNNABLE
就绪状态,表示这个线程正在cpu上执行,或者准备就绪随时可以去cpu上执行
TIME_WAITING
指定时间的阻塞,就在到达一定时间内之后会自动解除阻塞,使用sleep会进入这个状态,使用带有超时时间的join也会.
WAITING
不带时间的阻塞,就是死等,必须要满足一定条件才会阻塞解除,join或者wait都会进入WAITING
BLOCKED
由于锁竞争引起的阻塞
线程切换状态图
这里就是一个线程之间切换状态的情况过程图
为什么要学习状态
因为学习状态,做大的作用就是调试多线程的bug时候,可以作为重要参考,
当程序卡住的时候,意味着一些关键的线程阻塞了,就可以观察线程状态,分析出一些原因.