博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA - 多线程 两种方法的比较
阅读量:6623 次
发布时间:2019-06-25

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

 

一、继承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 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。

转载于:https://www.cnblogs.com/crazyacking/p/5287131.html

你可能感兴趣的文章
2017:IDC市场规模将持续增长 增速放缓
查看>>
从自动驾驶到学习机器学习:解读2017科技发展的15大趋势
查看>>
SinoBBD探索"一体化"大数据创新发展
查看>>
互联网金融带来新机遇 数据合规性不容忽视
查看>>
高速计算+海量存储 浪潮服务器让中国“看得更清”
查看>>
智能家庭本周锋闻:专注跨界100年
查看>>
Ovum:WBA将在5年内为全球3.5亿家庭提供宽带服务
查看>>
在Linux中永久并安全删除文件和目录的方法
查看>>
全民直播时代 内容监管还得靠技术
查看>>
10款Web开发最佳的Python框架
查看>>
企业需要刷新数据中心设施管理策略
查看>>
黑客很伤心,美国 NSA 泄露的黑客工具“无人问津”
查看>>
贵州省质监局:首个大数据地方标准发布
查看>>
通信巨头爱立信涉腐遭盘查 内忧外患陷困局
查看>>
卡巴斯基:中国成最易受DDoS攻击国家
查看>>
美国科技产业五巨头引领纳指跳水 “贡献值”接近75%
查看>>
大数据与银行风险管理革命
查看>>
Bitfinex交易所出现安全漏洞 导致用户价值7500万美元的比特币被盗
查看>>
布局区块链的诱惑,是争夺互联网的新协议
查看>>
法国电信公司Orange削减英国电信集团股份至1.33%
查看>>