面试题:Thread的start和run的区别

前言

这道题是并发编程关于线程Thread基础的面试题,小伙伴们是不是感觉简单?还是自己一下子蒙了呢?老顾今天来分享一下

先上代码

面试题:Thread的start和run的区别_第1张图片


	t.run(); //调用run方法

//调用执行

current main thread is main

task run.....

task thread is : main

换成调用方法t.start(),执行

current main thread is main

task run.....

task thread is : Thread-0

小伙伴们是否已经知道他们的区别了

1、run方法就是个普通的方法,被main线程调用,所以在执行task()方法时,是main线程调用的。

2、start方法被main线程调用,但执行task()方法并不是main线程。

源码分析

知道了run和start的区别,我们来看看start方法源码

面试题:Thread的start和run的区别_第2张图片


start方法中调用了本地方法start0,native即是本地方法(也是底层方法)。怎么看start0方法,可以去访问openjdk源码(访问比较慢)。

面试题:Thread的start和run的区别_第3张图片


start0映射的方法就是JVM_StartThread,我们再看一下jvm.cpp文件中JVM_StartThread方法,里面有段代码

面试题:Thread的start和run的区别_第4张图片


在看下thread_entry方法

面试题:Thread的start和run的区别_第5张图片


就是在thread_entry方法中调用run方法

总结

start方法中的基本流程

面试题:Thread的start和run的区别_第6张图片


小伙伴们看到这里,是不是感觉这个面试题很简单呢?如果我们能够回答面试官达到源码级别再弄个流程图,应该会加分吧不要小看很简单的问题,也许里面有大学问

你可能感兴趣的:(面试题:Thread的start和run的区别)