欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2021-05-26

程序员文章站 2022-06-21 10:46:05
...

Thread 中run()方法和start()方法的区别

目录

Thread 中run()方法和start()方法的区别以及为啥不能直接调用run()方法


public void run(){
    for(int i=0;i<200;i++){
        System.out.println("我先学习多线程"+i);
    }
}
public static void main(String[] args) {
    ThreadDemo1 t1 = new ThreadDemo1();
    //t1.run(); 如果直接调用run方法执行,则run方法为一个普通的类方法,做不到多线程的效果
    t1.start(); //调用start方法,开启线程,线程就绪,然后执行run中的方法,达到多线程的效果
    for(int i=0;i<1000;i++){
        System.out.println("晚上没吃饭"+i);
    }
}

总结:如果只是调用run方法,则就是调用了一个普通的类方法,调用start方法则是开启了多线程;

为什么调用了start方法就会调用run方法呢,因为调用start方法时会调用一个start0()的本地方法,而start0()

这个本地方法会在jdk中调用run方法。

  try {
        start0();
        started = true;
    } finally {
        try {
            if (!started) {
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {
            /* do nothing. If start0 threw a Throwable then
              it will be passed up the call stack */
        }
    }
}

private native void start0();

推荐阅读