1、新建(new):当用new关键字创建Thread对象的时候属于新建状态;
2、就绪(start()):当调用start方法时,线程进入就绪状态,等待CPU调度;start方法是启动线程的,调用后会让线程进入就绪状态,等待CPU调度,之后会自动执行run方法,而run方法只是线程要执行的业务逻辑的载体,直接调用run方法并不会启动新线程,所以run方法可以多次调用属于普通方法,start方法只能被调用一次,这两个方法的区别
3、运行:当CPU调度到这个线程时,他就会从就绪状态切换到运行状态,自动调用run方法开始执行
4、阻塞blocked:在run方法中若是调用了synchronized代码块或者方法,那么该线程就去获取锁,若是获取到了还是继续运行状态,若是获取不到就阻塞状态,等待其他线程释放锁,然后当前线程就可能获取到锁到达就绪状态,等待CPU调度;
5、等待wait:当前已经获取锁的线程才能调用wait方法,也就是wait要和synchronized一起使用,要在synchronized代码块中执行,执行wait方法就是阻塞等待状态,然后当前线程释放锁,让其他线程获得锁,其他获得锁的线程调用notify或者notifyall去唤醒在waitset中等待的线程也就是刚刚执行wait的线程,去和entrylist中的线程一起抢夺锁,谁抢到就是谁的;到达就绪状态,等待CPU调度;
6、计时等待sleep(long):当线程调用了sleep方法,线程到达计时等待状态,时间一到就由计时等待到达就绪状态,等待CPU去调度;
7、终止:当线程之行结束就是终止状态。