java线程之r.run()和t.start()区别

1、r.run()根本就没有新启线程,仍然是一个主线程,只有Runnable实现类的run()方法执行完毕之后,才会执行主线程的剩余逻辑。

2、t.start()才是启动了新线程,主线程可以继续执行自己的逻辑,同时子线程也开始执行子线程自己的逻辑。

3、例子:

public class Test {


    public static void main(String[] args) {
        test1();

        try {
            Thread.sleep(4000);
            System.out.println("============");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        test2();

    }


    private static void test1(){
        System.out.println("test1()方法执行start-----");

        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                    System.out.println("test1 - Runnable.run()方法执行-----");
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        };

        r.run();

        System.out.println("test1()方法执行end-----");

    }

    private static void test2(){
        System.out.println("test2()方法执行start-----");

        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                    System.out.println("test2 - Runnable.run()方法执行-----");
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        };

        Thread t = new Thread(r);
        t.start();

        System.out.println("test2()方法执行end-----");

    }
}

打印结果:

test1()方法执行start-----
test1 - Runnable.run()方法执行-----
test1()方法执行end-----
============
test2()方法执行start-----
test2()方法执行end-----
test2 - Runnable.run()方法执行-----

你可能感兴趣的:(java线程之r.run()和t.start()区别)