扩展Thread类并实现Runnable接口的场景[重复]

Posted

技术标签:

【中文标题】扩展Thread类并实现Runnable接口的场景[重复]【英文标题】:Scenario of extending Thread class and implementing Runnable interface [duplicate] 【发布时间】:2012-02-15 23:09:12 【问题描述】:

我是 Java 线程编程的新手,因此是这个基本问题。 (我查过,但找不到以前问过的这个问题)

我读到线程可以通过继承 Thread 类或实现 Runnable 接口来创建。 我看到了一个代码,它们都属于同一个类。

public class ThreadExample extends Thread implements Runnable 

我想知道什么样的情况会想要这个,如果这样做有什么好处,它是什么。

【问题讨论】:

【参考方案1】:

扩展Thread 实现Runnable是没用的(Thread已经实现Runnable)。你几乎总是想要实现Runnable(并且扩展Thread)。这使您可以灵活地直接使用Thread(不推荐)或使用java.util.concurrent 中较新的ThreadPool 实现之一(推荐)。

【讨论】:

【参考方案2】:

不,使用这种方法没有任何优势,因为 Thread 类实现了 Runnable 接口。所以,如果你的类扩展了 Thread 类。这意味着,它也在实现 Runnable 接口。

【讨论】:

【参考方案3】:

在这种特定情况下,它不是很有用,正如其他发帖人所解释的那样,很明显Thread 已经实现了Runnable

某些情况下,“陈述显而易见”可能很有用,就像对类用户的“提醒”:如果您有相当大的超类和接口层次结构,具有多个继承级别(其中一些在 3rd-party 库中),它可以作为帮助器将类声明为实现特定接口,即使它根据定义实现它,因为它超类已经实现了它或实现了该接口的子类之一。

标记接口特别有用(有些人可能会反对它们根本不应该使用,它们是不好的做法 - 有时你不能完全控制环境),即与没有实际的实现,只是设计来标记您的对象符合特殊功能(例如Cloneable)。在这种情况下,标记每个允许的类,即使它们的父类已经符合条件也可以更明确,因此更有用。

【讨论】:

【参考方案4】:

Runnable 接口意味着将一个作业分配给多个线程 而 Thread 类,每个线程都有一个与之关联的唯一对象。

【讨论】:

这根本不是正确的 在尝试回答更多问题之前,请阅读How do I write a good answer?。【参考方案5】:

当您需要更灵活地扩展其他基类时,最好实现可运行接口。

【讨论】:

在尝试回答更多问题之前,请阅读How do I write a good answer?。 我已经读过了。请告诉我 - 我的答案有什么问题?

以上是关于扩展Thread类并实现Runnable接口的场景[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 线程与线程池简单小结

Thread使用总结——Runnable和Thread的区别是啥

通过扩展 Thread 类或实现 Runnable 来创建线程更可取的是啥? [复制]

新兵日记--java多线程学习  --如何创建线程

扩展线程比实现 Runnable 更可取的场景? [复制]

Handler,Runnable和Threads有什么不同?