1、线程状态

- Start:初始化状态,调用start()方法,线程状态就变成就绪状态。
- ready-to-run:准备运行(就绪)状态,一旦抢占到了CPU就变成了运行状态,遇到stop(),或者run() exits
就变成死亡状态。
- Running:运行状态,线程运行结束后就变成了死亡状态,遇到Object.wait()就变成等待状态,遇到Thread.sleep()就变成睡眠状态,遇到IO阻塞或者进入同步代码块就变成阻塞状态。
- Waiting:等待状态,必须通过Object.notify()或者Object.notifyAll()来进行唤醒,才会再次回到就绪状态,否则将会一直处于等待状态。
- Sleeping:睡眠状态,超时等待,当一段时间过去之后,线程就能再次回到就绪状态。
- Blocked:阻塞状态,当数据获取到了,或者获得同步锁了,就能变成运行状态,如果其他线程都关闭了IO scoket ,就变成死亡状态。
- Dead:死亡状态。
2、代码演示
public class ThreadStatus implements Runnable{
@Override
public synchronized void run() {
while(true) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("自定义的线程执行了。。。");
}
}
public static void main(String[] args) {
ThreadStatus n = new ThreadStatus();
Thread thread = new Thread(n);
thread.start();
while(true) {
synchronized(n) {
System.out.println("主线程执行了。。。");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
n.notifyAll();
}
}
}
}