java线程的基本状态以及状态之间的关系
初始,就绪,运行,阻塞,结束
- 线程被创建出来后处于等待状态(new Thread
- 调用线程的.start()方法后进入就绪状态(也就是可以运行的状态
- 线程有等待状态转为运行态是通过CPU来决定的通常没办法让一个线程强制马上运行(即使Java中有设置运行优先级的方法,就算把优先级设置很高,也只是增加了让线程先运行的概率并不能保证一定先运行
- 在运行态的线程可以通过调用yield()方法来使得从运行态返回就绪态等待CPU再次调度(这种操作也称为线程让步
- 在运行态的线程可以通过调用sleep/wait/join方法让线程进入阻塞状态
- 如果是通过sleep方法进入阻塞状态的那么等设定的睡眠时间结束后线程就会自动变为就绪(Runnable)状态
- 如果是通过wait方法进入的阻塞状态那么就需要等待在其他线程中调用notify/notifyAll方法使线程返回就绪状态
- 如果是使用join方法进入的阻塞状态,这种方法一般是为了防止主线程(父线程)优先于子线程运行结束导致子线程没运行完就结束了当join的线程运行完毕后父线程会继续运行
- 有运行状态转为结束状态/死亡状态(Dead)正常情况是线程完整运行结束,如果在运行中出错也会进入死亡状态