Java线程实践:Runnable与Thread的区别
需积分: 0 49 浏览量
更新于2024-06-16
收藏 2.88MB DOCX 举报
“线程学习”
线程是操作系统中并发执行的基本单位,它们允许程序同时处理多个任务,提高系统效率。在Java中,我们有两种主要的方式来创建线程:继承`Thread`类和实现`Runnable`接口。
1. 实现Runnable接口的优势:
- 资源共享:当多个线程需要共享同一资源时,实现`Runnable`接口更为合适。因为一个类只能直接继承一个父类(Java的单继承特性),但可以实现多个接口,这样不会限制类的继承关系。
- 代码独立:`Runnable`对象可以被多个线程共享,实现代码与数据的分离,提高了代码的复用性。
- 增强程序的健壮性:通过接口实现线程,可以减少耦合性,使得代码更加稳定和易于维护。
2. 示例代码分析:
- `ThreadDemo1`类中,主线程创建了一个`TestThread`的实例并启动,然后进入无限循环。当`index`达到100时,主线程尝试调用`tt.join()`,这会让主线程等待`TestThread`完成或达到指定的毫秒数。
- 当`join()`没有参数时,主线程与子线程交替运行,直到`index`等于100后,子线程持续运行,主线程不再参与。
- 当`join(10000)`有参数时,子线程先运行10秒,之后每10秒与主线程交替执行。
3. 继承Thread类与实现Runnable接口的区别:
- 创建方式:继承`Thread`类时,只需重写`run()`方法,而实现`Runnable`接口则需将`run()`方法放入实现的类中,并通过`Thread`构造函数传入`Runnable`对象来创建线程。
- 多态性:`Runnable`接口遵循多态原则,而继承`Thread`类则受限于单继承机制。
- 线程数量:一个`Thread`对象只能关联一个`Runnable`实例,所以实现`Runnable`可以创建多个线程共享同一个任务,而继承`Thread`每个实例都是一个独立的线程。
- 异常处理:如果`run()`方法抛出未捕获的异常,`Thread`类会捕获并打印,而`Runnable`接口则会终止包含它的线程。
4. 示例代码对比:
- 在`ThreadDemo1`的第二个版本中,四个`TestThread`实例分别启动,它们都有自己的`Thread`对象,因此可以独立运行。每个线程都有自己的`ticket`变量,可以独立计数,展示了多线程同时操作资源的情况。
选择实现`Runnable`接口还是继承`Thread`取决于具体需求。如果需要多线程共享数据,或者避免单继承限制,应选择实现`Runnable`。而如果需要对线程进行定制,如添加额外的方法或状态,直接继承`Thread`可能更合适。在实际开发中,根据项目需求灵活运用这些知识,能够有效地提升程序的并发性能和结构合理性。
178 浏览量
点击了解资源详情
128 浏览量
2022-06-10 上传
153 浏览量
124 浏览量
179 浏览量
2021-09-30 上传
262 浏览量

大数据侠客
- 粉丝: 741
最新资源
- 微软发布VS2008编译错误C1859修复补丁KB976656
- VR_audioscape:Google Summer of Code 2017的VR音频应用开发
- 一键优化系统性能:高效卸载与清理
- NumSharp让.NET开发人员享受NumPy语法与高效内存访问
- 检测普通对象的JavaScript库:is-plain-obj
- 前端至全栈技术项目源码合集 - 学习与实践资源包
- 解决Tomcat启动异常:未找到APR库tcnative-1.dll
- 深入解析HTML5: 语义、标准与样式指南
- Carpeaqua模板:构建与部署Ghost主题指南
- 腾达BCM5357C0芯片固件救砖教程
- React与Rust编译WebAssembly的样板应用实践
- UBOOT 1.1.6下SDHC和MMC驱动支持实现
- React Native滑动按钮组件RNSwipeButton的功能与应用
- 一键修复IE错误 强力回归原始主页
- 全面技术覆盖的vc商城v1.30源代码及学习指南
- WC-Fontawesome:简化Font Awesome v5的Web组件集成