当前位置: 首页 > wzjs >正文

网站建设的流程深圳定制家具厂排名

网站建设的流程,深圳定制家具厂排名,如何创建一个个人网站,中国新闻社在哪里【面试题】深度解析Java多线程中的 run() 与 start() 有什么区别? 大多数人的回答 start() run() 深入底层源码的解析 run() 与 start() 为什么我们不能直接调用 run() 方法? 如何证明 start() 会调用 run() 方法? JVM -> OS执行全…

【面试题】深度解析Java多线程中的 run() 与 start() 有什么区别?

大多数人的回答

start()

run()

深入底层源码的解析 run() 与 start() 

为什么我们不能直接调用 run() 方法?

如何证明 start() 会调用 run() 方法?

JVM -> OS执行全流程 !!!

完整流程图 


【面试题】深度解析Java多线程中的 run() 与 start() 有什么区别?

大多数人的回答

下面这个是我2022年6月写的文章,当时刚刚学多线程,所以对这个问题的理解很片面~~~  

下文是现在2022.11.30,我对其新的见解!站在JVM底层源码的角度来解析这个问题!!! 

Java多线程编程(一)——线程的3种实现方法_面向鸿蒙编程的博客-CSDN博客https://blog.csdn.net/weixin_43715214/article/details/122329166

start()

start() 方法是启动线程,并由 JVM 来调用线程的 run() 方法执行,是真正的多线程!

这时此线程是处于就绪状态, 并没有运行。这时无需等待 run 方法体代码执行完毕,可以直接继续执行下面的代码。 

run()

run() 方法里面封装的是需要被线程执行的逻辑代码,如果直接调用run()方法和调用普通方法没有区别(单线程)!

run() 可以重复调用,而 start()只能调用一次


深入底层源码的解析 run() 与 start() 

为什么我们不能直接调用 run() 方法?

如果直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。

调用 start 方法方可启动线程并使线程进入就绪状态;而 run 方法只是 thread 的一个普通方法调用,还是在主线程里执行。 

如何证明 start() 会调用 run() 方法?

我们可以用一段简单的代码,通过调试来证明!

public class Demo {public static void main(String[] args) {Thread t = new Thread(() -> {System.out.println("dsfdsfds");});t.start();}
}

start()方法上面打一个断点 

run()方法上面打一个断点  

通过调试发现,确实是会跳到run()里面! 但是具体怎么进去的?在IDEA中是看不出来的!因为这里是由JVM(C++写的)编写的,如果我们想要搞清楚它们是要去阅读JVM源码的!

JVM -> OS执行全流程 !!!

(1)使用 new Thread() 创建一个线程,然后调用 start0()方法 进行 Java 层面的线程启动

当我们自己写的代码使用 start() 方法的时候,表示启动这个线程,在该方法的内部会去调start0() 这个本地方法

(2)调用本地方法start0(),去调用 JVM 中的JVM_StartThread方法进行线程创建和启动

public
class Thread implements Runnable {private static native void registerNatives();static {registerNatives();}...
}

start0() 会去调 JVM_StartThread 进行线程创建、启动,那它们是如何扯上关系的???

在 Java 中的 Thread 类,当我们初始化的时候(new的时候)会先执行静态代码块里的方法!

也就是说,会先调一下 registerNatives() 本地方法,如下图:

(3)调用 new JavaThread(&thread entry, sz) 进行线程的创建,并根据不同的操作系统平台调用对应的 os::create thread 方法进行线程创建

此时操作系统会切换为内核态!!! 

(4)新创建的线程状态为 lnitialized(初始化状态),调用了sync->wait() 的方法进行等待(先阻塞!!!),等到被唤醒才继续执行 thread->run()

等待JVM将其唤醒

(5)调用 Thread::start(native thread) 方法进行线程启动,此时将线程状态设置为RUNNABLE,接着调用 os::start_thread(thread),根据不同的操作系统选择不同的线程启动方式

(6)线程启动之后状态设置为RUNNABLE,并唤醒第4步中等待的线程,接着执行 thread->run() 的方法

(7) JavaThread::run()方法会回调第1步new Thread中复写的run()方法。

完整流程图 

 Thread#start()源码分析 流程图模板_ProcessOn思维导图、流程图

纵观整个流程,Java Thread --> JVM JavaThread --> OS Thread,在JVM操作OS创建线程时,会涉及到用户态到内核态的切换!!!这也是Java线程是一个很“”的操作的原因!!!

同样这也是Java线程池为什么优于多线程的原因!为什么要有线程复用机制的原因!!!

具体看这里 ↓ ↓ ↓

【并发】深入理解Java线程的底层原理_面向鸿蒙编程的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/weixin_43715214/article/details/128099128


文章转载自:

http://QiwvTZDl.zwpzy.cn
http://5DtqJVCu.zwpzy.cn
http://pQntMiTP.zwpzy.cn
http://tBfdQSY5.zwpzy.cn
http://nKfxy0NX.zwpzy.cn
http://B4uKzhEW.zwpzy.cn
http://LC9Oe4m3.zwpzy.cn
http://qNiKyQeF.zwpzy.cn
http://SzW5ZGRH.zwpzy.cn
http://wGeVKBz4.zwpzy.cn
http://Tsd8eAqj.zwpzy.cn
http://k4TficzR.zwpzy.cn
http://lnXFyjgw.zwpzy.cn
http://mUwENuM1.zwpzy.cn
http://SIVPZM9B.zwpzy.cn
http://Zl3mIEg0.zwpzy.cn
http://SYb9hwWa.zwpzy.cn
http://C1nBR92O.zwpzy.cn
http://X1VnoJjn.zwpzy.cn
http://sZjs0H7S.zwpzy.cn
http://UwTxNKH3.zwpzy.cn
http://T6KkysCP.zwpzy.cn
http://DUDkgYoh.zwpzy.cn
http://VltAUzIl.zwpzy.cn
http://UDvXaQP4.zwpzy.cn
http://bEGJwoZN.zwpzy.cn
http://gngQYNlF.zwpzy.cn
http://HIu9i9Ap.zwpzy.cn
http://JrmpppWN.zwpzy.cn
http://IRVVteDh.zwpzy.cn
http://www.dtcms.com/wzjs/747696.html

相关文章:

  • 网站开发实验室建设方案设计展板排版样式
  • 做地方网站赚钱吗怎么才能建设免费网站
  • 自助建站系统wordpress中国可以用吗
  • wordpress企业网站模板下载商城网站建设需求分析
  • c 做精品课程网站网站建设擎宇
  • 做网站黑网站赚钱么么昆明响应式网站
  • 网站推广软件哪个最好昆明seo排名外包
  • 网站建设如何asp.net jsp 网站
  • 大理网站建设公司移动互联网技术就业前景
  • 哪个网站可以做平面兼职1小时快速搭建网站
  • app网站开发报价流浪猫狗救助网站开发设计
  • 韶关住房和城乡建设网站网站设计开发工程师
  • 台州临海市建设局网站建网上商城的第三方网站哪个好
  • 汕头模板建站软件张家港网页设计培训
  • 做网站的服务器有什么作用wordpress后台超慢
  • php网站开发师招聘鞍山网站建设企业
  • iis怎么建设网站手机网站仿站教程
  • 郑州港区建设投资公司网站企业网站的规划与建设
  • 网站定制 动易企业建设流程
  • 网站开发职位介绍深圳设计公司vi设计模板
  • wordpress文件无法创建目录关键词优化价格
  • 贵阳网站制作软件深圳建筑工程信息网
  • 东莞企慕网站建设wordpress网站地图提交
  • 广东佛山网站建设企腾做的网站怎么样
  • 网站轮播图怎么做node.js网站开发合适吗
  • 大连公司企业网站建设织梦转wordpress
  • php网站源代码重?c网站开发
  • 主机如何做网站空间我的世界是怎么做的视频网站
  • 网站用cmsWordpress 无效插件
  • 汶上网站建设秦皇岛是属于哪个省的城市