• Android-Java-Thread start run的区别


    Thread start(Thread子类.start(); 这样属于开启新的线程,不属于方法调用)

      Thread.currentThread().getName(); 获取当前正在运行的线程执行路径名称

      Thread.currentThread().getName(); 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:

      Demo extends Thread { getName(); } 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:

      

    package android.java.thread3.thread2;
    
    class Demo extends Thread { // 继承Thread 并重写 run() 方法,属于定义一个线程子类
    
        private String name;
    
        public Demo(String name) {
            this.name = name;
        }
    
        /**
         * run方法里面执行的是start线程里面执行任务
         */
        @Override
        public void run() {
            super.run();
            showMethod();
        }
    
        public void showMethod() {
            for (int i = 0; i < 10; i++) {
                System.out.println("Demo showMethod >>>>>>>" + name + " " + i + " 当前执行这行代码的线程:" + getName());
            }
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
    
            Demo demo1 = new Demo("乔峰");
    
            Demo demo2 = new Demo("段誉");
    
            // 任务1 >>>启动一个新线程去执行任务
            demo1.start();
    
            // 任务2 >>>启动一个新线程去执行任务
            demo2.start();
    
            // 任务3 >>>main线程在执行
            for (int i = 0; i < 10; i++) {
                System.out.println("Test main " + i + " 当前执行这行代码的线程:" + Thread.currentThread().getName());
            }
        }
    
    }

    执行的日志:

    Demo showMethod >>>>>>>段誉 0 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>段誉 1 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>乔峰 0 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>段誉 2 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>乔峰 1 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>段誉 3 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>乔峰 2 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>乔峰 3 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>乔峰 4 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>乔峰 5 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>乔峰 6 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>乔峰 7 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>乔峰 8 当前执行这行代码的线程:Thread-0
    Demo showMethod >>>>>>>段誉 4 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>乔峰 9 当前执行这行代码的线程:Thread-0
    Test main 0 当前执行这行代码的线程:main
    Test main 1 当前执行这行代码的线程:main
    Demo showMethod >>>>>>>段誉 5 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>段誉 6 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>段誉 7 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>段誉 8 当前执行这行代码的线程:Thread-1
    Demo showMethod >>>>>>>段誉 9 当前执行这行代码的线程:Thread-1
    Test main 2 当前执行这行代码的线程:main
    Test main 3 当前执行这行代码的线程:main
    Test main 4 当前执行这行代码的线程:main
    Test main 5 当前执行这行代码的线程:main
    Test main 6 当前执行这行代码的线程:main
    Test main 7 当前执行这行代码的线程:main
    Test main 8 当前执行这行代码的线程:main
    Test main 9 当前执行这行代码的线程:main

    以上代码:可以看到有三条线程在运行,Thread-1  Thread-0  main

     


    Thread run(Thread子类.run(); 这样属于方法调用,没有开启线程)

      Thread.currentThread().getName(); 获取当前正在运行的线程执行路径名称

      Thread.currentThread().getName(); 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:

      Demo extends Thread { getName(); } 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:

      

    package android.java.thread3.thread2;
    
    class Demo extends Thread { // 继承Thread 并重写 run() 方法,属于定义一个线程子类
    
        private String name;
    
        public Demo(String name) {
            this.name = name;
        }
    
        /**
         * run方法里面执行的是start线程里面执行任务
         */
        @Override
        public void run() {
            super.run();
            showMethod();
        }
    
        public void showMethod() {
            for (int i = 0; i < 10; i++) {
                System.out.println("Demo showMethod >>>>>>>" + name + " " + i + " getName():" + getName() + " ------- Thread.currentThread().getName():" + Thread.currentThread().getName());
            }
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
    
            Demo demo1 = new Demo("乔峰");
    
            Demo demo2 = new Demo("段誉");
    
            // 任务1 >>>main线程在执行
            demo1.run(); // 注意⚠️ 这个是方法调用,还是在main线程中运行,并没有开启启动线程,只有调用 .start();才会开启启动线程
    
            // 任务2 >>>main线程在执行
            demo2.run(); // 注意⚠️ 这个是方法调用,还是在main线程中运行,并没有开启启动线程,只有调用 .start();才会开启启动线程
    
            // 任务3 >>>main线程在执行
            for (int i = 0; i < 10; i++) {
                System.out.println("Test main " + i + " 当前执行这行代码的线程:" + Thread.currentThread().getName());
            }
        }
    
    
    
    }

    打印的日志:

    以下打印的日志中:Demo showMethod  ---->    getName():Thread-0    和     Thread.currentThread().getName():main 为什么不一样呢?

    答:getName():Thread-0得到的是  Demo extends Thread 后得到的类名叫Thread-0/Thread-1;

      Thread.currentThread().getName():main: Demo是被main线程执行的,所以Demo的执行路径是main

       

    Demo showMethod >>>>>>>乔峰 0 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 1 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 2 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 3 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 4 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 5 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 6 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 7 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 8 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>乔峰 9 getName():Thread-0 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 0 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 1 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 2 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 3 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 4 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 5 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 6 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 7 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 8 getName():Thread-1 ------- Thread.currentThread().getName():main
    Demo showMethod >>>>>>>段誉 9 getName():Thread-1 ------- Thread.currentThread().getName():main
    Test main 0 当前执行这行代码的线程:main
    Test main 1 当前执行这行代码的线程:main
    Test main 2 当前执行这行代码的线程:main
    Test main 3 当前执行这行代码的线程:main
    Test main 4 当前执行这行代码的线程:main
    Test main 5 当前执行这行代码的线程:main
    Test main 6 当前执行这行代码的线程:main
    Test main 7 当前执行这行代码的线程:main
    Test main 8 当前执行这行代码的线程:main
    Test main 9 当前执行这行代码的线程:main

    三个任务只有一个线程main在执行:

  • 相关阅读:
    对虚机设备Bridge ,Vlan, VETH, TAP详细介绍
    DevStack部署Openstack环境
    Ubuntu配置 PPTP 服务器端
    Ubuntu 配置PPTP客户端
    Git学习笔记
    Mysql安装随记,整理内容来源网络
    GitHub访问慢的优化处理
    NetCore部署到Linux服务器+Supervisor的步骤及过程中踩过的坑
    JavaScript的定时器如何先触发一次再延时
    在实现文本框只能输入数字和小数点的基础上实现了价格样式(保留两位小数)
  • 原文地址:https://www.cnblogs.com/android-deli/p/10220865.html
Copyright © 2020-2023  润新知