Java多线程系列-start()和run方法的区别

Posted viscu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程系列-start()和run方法的区别相关的知识,希望对你有一定的参考价值。

  • start()和run是Thread类里面的两个方法。
    学过的都知道,我们创建了一个线程类,通过调用start()方法来启动线程,并且该线程会执行内部的run()方法,那么我们可以直接调用run()方法吗。
    答案显而易见,当然是可以啊,可是前后两者还是有本质的区别的。

start()run()

  • 调用start()方法,会创建一个新的线程,而这个新的线程会执行Thread类中的run方法
  • 调用run()方法,不会创建新的线程,而是直接在当前的线程直接执行该方法。

以上就是这两个方法的本质区别,并且大多数情况下,直接调用run()的错误的。

public class StartAndRunTest {

    private static class MyThread extends Thread{

        private String name;

        public MyThread(String name) {
            this.name = name;
        }

        @Override
        public void run() {
            System.out.println(name+" running in "+Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        MyThread m1=new MyThread("m1");
        MyThread m2=new MyThread("m2");

        m1.start();
        m2.run();
    }

}
/*
m2 running in main
m1 running in Thread-0
*/

上面的例子你可以看到,调用start的Thread类在新的线程上执行run方法,而直接调用run()方法的则是在当前main线程。(一个线程不能重复start(),具体可以看内部实现)



以上是关于Java多线程系列-start()和run方法的区别的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程系列 基础篇03 Thread中start()和run()的区别

java 多线程系列基础篇之join()start()run()方法

Java_多线程并发编程基础篇—Thread类中start()和run()方法的区别

多线程 start 和 run 方法到底有什么区别?

Java多线程中start()和run()的区别

关于多线程start()方法原理解读