当创建好当前对象之后,没有启动之前(没有调用start方法),比如Thread t = new Thread();
2、就绪状态准备开始执行,并没有执行,表示调用start方法之后,未获取到cpu资源
3、运行状态当前进行获取到cpu资源之后
4、死亡状态:当运行中的线程正常执行完所有的代码逻辑或因为异常情况导致程序结束叫死亡状态
5、阻塞状态在程序运行过程中,发生某些情况,导致当前线程无法顺利执行,此时会进入阻塞状态,进入阻塞状态的
原因消除以后,所有的阻塞队列会再次进入到就绪状态,随机抢占cpu资源,等待执行
为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
new 一个 Thread,线程进入了新建状态。调用 start() 方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。
而直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。
总结: 调用 start 方法方可启动线程并使线程进入就绪状态,而 run 方法只是 thread 的一个普通方法调用,还是在主线程里执行。



