java 多线程 继承Thread和实现Runnable的区别
2个回答
展开全部
Java中线程的创建有两种方式:
1、 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中
2、 通过实现Runnable接口,实例化Thread类
Runnable
接口只有一个方法 run(),我们声明自己的类实现 Runnable
接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建
Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现。
3、继承Thread实现的模式是 定义多个线程,各自完成各自的任务.
4、实现Runnable实现的模式是 定义多个线程,实现一个任务.
总结:一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。其实,在实现一个任务用多个线程来做也可以用继承Thread类来实现,只是比较麻烦,一般我们用实现Runnable接口来实现。
展开全部
Thread自身也实现了Runnable接口,不过扩展出更多的功能,比如比如常用的启动接口start。
Runnable,是线程的原生接口,要启动线程,必须可以调动到run方法接口。run方法是java库设计者,给我们写任务代码的地方。
Thread的start,会让操作系统(或者理解成虚拟机,实际上是操作系统在完成此任务)把run方法中的代码安排成线程执行。
Thread类是有特定功能的组件。直接运行run方法,是不可能启动为线程运行的。
从设计模式的角度看,继承Thread重写run方法,使用面向对象的继承规则,设计模式理念是适配器理念。好处简单,坏处,java的类不可继承多个父类,此处实际使用不是什么大问题。
实现Runnable使用了,面向对象的多态规则。好处,可以继承其他类。使用中也不是什么大问题。
设计模式中有一条,所有的组件先写接口再写实现,更容易扩展,修改迁移。不是很大的项目,为实现接口而编写接口得不偿失。如spring推荐的模式在笑项目中就是这样尴尬!
Runnable,是线程的原生接口,要启动线程,必须可以调动到run方法接口。run方法是java库设计者,给我们写任务代码的地方。
Thread的start,会让操作系统(或者理解成虚拟机,实际上是操作系统在完成此任务)把run方法中的代码安排成线程执行。
Thread类是有特定功能的组件。直接运行run方法,是不可能启动为线程运行的。
从设计模式的角度看,继承Thread重写run方法,使用面向对象的继承规则,设计模式理念是适配器理念。好处简单,坏处,java的类不可继承多个父类,此处实际使用不是什么大问题。
实现Runnable使用了,面向对象的多态规则。好处,可以继承其他类。使用中也不是什么大问题。
设计模式中有一条,所有的组件先写接口再写实现,更容易扩展,修改迁移。不是很大的项目,为实现接口而编写接口得不偿失。如spring推荐的模式在笑项目中就是这样尴尬!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询