首页 > 其他 > 详细

Thread中start和run方法的区别

时间:2020-01-04 11:06:34      阅读:100      评论:0      收藏:0      [点我收藏+]
public class ThreadTest {
    // 定义一个方法
    private static void testdemo(){
        // 输出这个方法的线程名字
        System.out.println("这里是testdemo方法 : " +Thread.currentThread().getName());
    }
    public static void main(String[] args) {
        Thread t = new Thread(){
            public void run(){
                testdemo();
            }
        };
        System.out.println("这里是main方法 : " + Thread.currentThread().getName());
        t.run();
     // t.start(); } }

调用run方法出现的结果

技术分享图片

 

 

 调用start方法出现的结果

技术分享图片

 

 接下来我们来看下调用start这个方法为什么会不一样

点击进入start这个方法

技术分享图片

 

jdk网站:http://hg.openjdk.java.net

 

进入到具体的目录:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/b860bcc84d51/src/share/native/java/lang

这里看的是jdk8的

技术分享图片

 进入Thread.c这个文件

技术分享图片

 

 来到JVM文件:http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/8c0fa90986a6/src/share/vm/prims/jvm.cpp

搜索JVM_StartThread

技术分享图片

 

 然后再去深入看下thread_entry这里做了什么

技术分享图片

 

1、调用start方法的时候是会去创建一个新的子线程,但是最后还是调用了run方法;即调用start()--->start0()-->JVM_StartThread-->thread_entry-->run()

2、调用run方法的时候还在主线程调用,即t.run();-->Thread这个类中的重写的run方法

start方法最后还是调用了run方法,所以两者除了执行步骤不一样,其他都差不多

 

Thread中start和run方法的区别

原文:https://www.cnblogs.com/ltzdream/p/12147650.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!