4.5.1多线程--线程状态

五种

image.png

image.png

六种

image.png

image.png
public class StateDemo {
    public static void main(String[] args) {
        Thread t1 = new Thread("t1"){//NEW
            @Override
            public void run() {
                System.out.println("t1 running...");
            }
        };

        Thread t2 = new Thread("t2"){
            @Override
            public void run() {
                while(true){// Java 中的 RUNNABLE

                }
            }
        };
        t2.start();

        Thread t3 = new Thread("t3"){//立即执行完 TERMINATED
            @Override
            public void run() {
                System.out.println("t3 running...");
            }
        };
        t3.start();

        Thread t4 = new Thread("t4"){
            @Override
            public void run() {
                synchronized (StateDemo.class){
                    try {
                        Thread.sleep(1000000000);//TIMED_WAITING 实操打印出了BLOCKED
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t4.start();

        Thread t5 = new Thread("t5"){
            @Override
            public void run() {
                synchronized (StateDemo.class){
                    try {
                        t2.join();//WAITING
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t5.start();

        Thread t6 = new Thread("t6"){
            @Override
            public void run() {
                synchronized (StateDemo.class){
                    try {
                        Thread.sleep(1000000);//BLOCKED
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t6.start();

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("t1 state :" + t1.getState());
        System.out.println("t2 state :" + t2.getState());
        System.out.println("t3 state :" + t3.getState());
        System.out.println("t4 state :" + t4.getState());
        System.out.println("t5 state :" + t5.getState());
        System.out.println("t6 state :" + t6.getState());
        //t3 running...
        //t1 state :NEW
        //t2 state :RUNNABLE
        //t3 state :TERMINATED
        //t4 state :BLOCKED
        //t5 state :WAITING
        //t6 state :BLOCKED
    }
}

本章小结

  • 线程创建
  • 线程重要 api,start run sleep join interrupt
  • 线程状态
  • 应用方面
    • 异步调用:主线程执行期间,其他线程异步执行耗时操作
    • 提高效率:并行计算,缩短运算时间
    • 同步等待:join
    • 统筹规划:合理使用线程,得到最优效果
  • 原理
    • 线程运行流程:栈、栈帧、上下文切换、程序计数器
    • Thread 两种创建方式的源码
  • 模式方面:两阶段终止
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容