JAVA - 多线程 两种方法的比较
一、继承Thread类
- 实现方法:
(1).首先定义一个类去继承Thread父类,重写父类中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。
(2).直接创建一个ThreadDemo2类的对象,也可以利用多态性,变量声明为父类的类型。
(3).调用start方法,线程t启动,隐含的调用run()方法。
二、实现Runnable接口
- 实现方法:
(1).定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。
(2).创建Runnable接口实现类的对象。
(3).创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以实现多继承)
(4).调用Thread对象的start()方法,启动线程
区别
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
其他:
使用实现Runnable接口方式创建线程可以共享同一个目标对象(TreadDemo1 tt=new TreadDemo1();),实现了多个相同线程处理同一份资源。
然后再看一段来自JDK的解释:
Runnable
接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为run
的无参数方法。
设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread
类实现了Runnable
。激活的意思是说某个线程已启动并且尚未停止。
此外,Runnable
为非 Thread
子类的类提供了一种激活方式。通过实例化某个Thread
实例并将自身作为运行目标,就可以运行实现Runnable
的类而无需创建 Thread
的子类。大多数情况下,如果只想重写run()
方法,而不重写其他 Thread
方法,那么应使用Runnable
接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。
最新文章
- VIEW SERVER STATE permission was denied on object 'server', database 'master'
- [MySQL][Spider][VP]Spider-3.1 VP-1.0 发布
- PHP简单漂亮的分页类
- js获取浏览器地址
- 资源池设计模式 (Resource Pool)和数据池的简单实现
- maven 建立ssh项目
- Console 程序在任务计划程序无法读写文件
- HTML静态分页(形如:首页,上一页,下一页,尾页)
- hadoop如何查看文件系统
- swift button一些简单设置
- UWP 显示图片到Image控件
- redux简明学习
- sql数据库中日期函数---2017-04-12
- UE4 读取本地图片
- 解决error while loading shared libraries的通用方案
- Python并发编程之多线程使用
- GO : 斐波纳契数列
- cordova/ionic打包流程
- 机器学习基础:(Python)训练集测试集分割与交叉验证
- Postman的一个使用技巧----设置环境变量
热门文章
- 算法:Astar寻路算法改进
- TDD(测试驱动开发)培训录
- [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)
- Java的默认编码
- [Linux基础]Linux基础知识入门及常见命令.
- 如何使用ITEXTSHARP将HTML代码字符串写进PDF
- 体验Visual Studio 2015 Windows Forms应用程序开发与维护
- Hello Netgen
- 前端工程师技能之photoshop巧用系列扩展篇——自动切图
- Android实现下滑和上滑事件