package cn.qbz.thread;
public class ThreadLifeTest {
public static void main(String[] args) {
Thread thread1 = new Thread(new Runnable() {
public void run() {
System.out.println("4.阻塞状态......");
for (int i = 0; i < 2; i++) {
System.out.println("我是来阻塞的,哈哈哈......");
}
}
});
//1.新建状态 线程未被启动
ThreadTest thread2 = new ThreadTest(thread1);
System.out.println("1.新建状态......");
//2.就绪状态 线程已经被启动,正在等待被分配给CPU时间片
thread2.start();
System.out.println("2.就绪状态......");
}
}
class ThreadTest extends Thread {
private Thread thread;
public ThreadTest(Thread thread) {
this.thread = thread;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
// 线程获得CPU资源正在执行任务(run()方法),
// 此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,
// 线程将一直运行到结束
System.out.println("3.运行状态......");
if (i == 2) {
try {
//4.阻塞状态,等thread线程执行结束或者阻塞后,
// 当前线程才可以继续执行
thread.start();
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("5.即将死亡......");
}
}
新建状态: 当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。 如:ThreadTest thread2 = new ThreadTest(thread1);
就绪状态: 线程已经被启动,正在等待被分配给CPU时间片, 也就是说此时线程正在就绪队列中排队等候得到CPU资源。 如:thread.start();
运行状态: 线程获得CPU资源正在执行任务(run()方法), 此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入, 线程将一直运行到结束。
死亡状态: 当线程执行完毕或被其它线程杀死,线程就进入死亡状态, 这时线程不会再进入就绪状态等待执行。
自然终止:正常运行run()方法后终止 异常终止:调用stop()等方法让一个线程终止运行
阻塞状态: 由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。
等待阻塞:wait() 同步阻塞:获取同步锁失败 其他阻塞:sleep()、join()