Java启动线程的正确方式 & 为什么 run()方法不是启动线程的方式
发布日期:2021-06-30 13:11:42
浏览次数:3
分类:技术文章
本文共 973 字,大约阅读时间需要 3 分钟。
文章目录
启动线程方式的示例
如下的代码示例. 使用lambda表达式 方式, 实现了Runnable 接口.
分别用 run方法和start方法去启动线程public class StartAndRunMethod { public static void main(String[] args) { Runnable runnable = () -> { System.out.println(Thread.currentThread().getName()); }; runnable.run(); new Thread(runnable).start(); }}
运行程序, 可以看到 run方法打印的线程名称为main线程, 并没有起一个新的线程. 而start方法才是启动了一个新的线程.
start方法解读
start方法的含义:
- 通知jvm在有空闲的情况下, 启动新的线程 . 至于什么时候去运行这个线程,是由线程的调度器去决定的 . 因此调用start方法的顺序, 并不能决定执行顺序.
- 由main线程去做一些准备工作,让新创建的线程能够去运行 让线程处于就绪状态.
- 不能重复执行start方法 两次执行start方法, 报错如下 .
java.lang.IllegalThreadStateException
非法的线程状态异常. 线程执行完毕, 变成终止状态, 不可能再次变成就绪状态, 因此抛出异常.
start方法源码分析. start方法的源码, 会有如下的几个步骤:
- 启动柜新线程, 检查线程状态
- 加入线程组
- 调用start0() 具体的源码如下. 启动可以看到 start0方法为native方法
为什么 run()方法不是启动线程的方式
Thread 类的run方法如下.
此run有两种情况- 如果是实现Runnable接口的方式创建线程, 那么此处的run方法就会传入target
- 如果是继承Thread类的方式创建线程, 那么此run方法会完全被重写.
通过源码可以看出, 此方法完全没有创建线程的代码. 只是一个普通的方法而已. 不会像start方法, 去调用native方法, 去启动线程.
转载地址:https://javaweixin6.blog.csdn.net/article/details/108041958 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月16日 00时49分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Cisco交换机SPAN&RSPAN调试实录
2019-05-01
轻松掌握Ubuntu Linux的3D桌面快捷键使用
2019-05-01
通过视频展示如何通过Samba配置PDC
2019-05-01
OSSIM(开源安全信息管理系统)在企业网络管理中的应用
2019-05-01
网站及监控利器 Pandora FMS使用体验
2019-05-01
解决Esxi5下安装Windows 8的问题
2019-05-01
如何搭建Eclipse +Apache Tomcat配置Java开发环境
2019-05-01
开源计算机集群监控Ganglia应用视频
2019-05-01
Linux软件万花筒
2019-05-01
vSphere5安装配置视频教程
2019-05-01
《Linux企业应用案例精解》一书已由清华大学出版社出版
2019-05-01
安装配置FreeBSD9全过程体验
2019-05-01
全球开源软件发展趋势分析
2019-05-01
Linux系统安全加固(一)
2019-05-01
Linux常用的安全工具
2019-05-01
Linux下网络服务的安全设置
2019-05-01
如何在MAC机器中实现移动设备WiFI上网(没有专门的无线路由器的情况)
2019-05-01
一款非常实用的在线代码分享站点
2019-05-01
教你一分钟制作自己的电子书(视频)
2019-05-01