博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程:为什么不能override start方法
阅读量:6323 次
发布时间:2019-06-22

本文共 641 字,大约阅读时间需要 2 分钟。

  hot3.png

多线程的简单写法是:继承Thread类,然后覆写run方法(写一些需要做的事),然后再客户端程序中调用对象的start方法就能启动一个线程。但是为什么不能override start方法呢???

观察: 带着问题看源码: 看Thread类的源码: 一个synchronized的start方法,返回值void 首先判断线程状态必须是未启动状态,否则抛出非法线程状态异常, 然后加入到线程组中。 之后执行start0()方法:分配栈内存, 启动线程。运行run方法。

然后,在启动前设置了停止状态 这就是主要步骤。

分析:重点在于start0()方法,这是一个 native方法,即本地方法。它做了:启动线程,申请栈内存,运行run方法,修改线程状态等事情。线程的管理和内存的管理都是由JVM负责。如果你要override start方法,也就是说,你要撤销线程的管理和栈内存管理功能,这样注定是启动失败。我们不需要关注线程和内存的管理,JVM都为我们做了,我们只需要在run方法体中写一些多线程的逻辑即可。JVM简化了多线程的应用。

有人非要较劲,就是要override start方法:罕见的做法,其实也很简单,只需要在复写的start方法中写上super.start()方法即可。 必须要要说:所以要复写start方法的场景都可以被其他方式更好地替代。例如类变量。事件机制,监听等方式。

转载于:https://my.oschina.net/sudojs/blog/287857

你可能感兴趣的文章
SSM练习——登录实现
查看>>
余光中_百度百科
查看>>
方法sessionjsp之监听器
查看>>
判断 网络是否通常,以及判断用户使用的网络类型,时2G\3G\还是wifi
查看>>
下一代 Hadoop YARN :相比于MRv1,YARN的优势
查看>>
阿里巴巴离职DBA 35岁总结的职业生涯
查看>>
LOT NUMBER / PO / RECEIPT NO Relation.
查看>>
Fedora9常用网络调试
查看>>
Matlab绘图方法汇总
查看>>
关于操作系统的进程调度问题
查看>>
POJ 1243 One Person
查看>>
Bash: about .bashrc, .bash_profile, .profile, /etc/profile, etc/bash.bashrc and others
查看>>
hibernate 映射实例 学生 课程 成绩
查看>>
【CAS单点登录视频教程】 第04集 -- tomcat下配置https环境
查看>>
自适应网页布局经验
查看>>
Ubuntu apache 禁止目录浏览
查看>>
常用脚本--归档ERRORLOG
查看>>
js网页倒计时精确到秒级
查看>>
常用CSS缩写语法总结
查看>>
TDD:什么是桩(stub)和模拟(mock)?
查看>>