关于java:扩展Thread类和实现Runnable接口的场景

Scenario of extending Thread class and implementing Runnable interface

本问题已经有最佳答案,请猛点这里访问。

我对Java编程很感兴趣,因此这是一个基本问题。(我查过了,但找不到以前问过的这个问题)

我了解到线程可以通过继承线程类或实现可运行接口来创建。我看到了一个代码,两个都属于同一个类。

1
2
public class ThreadExample extends Thread implements Runnable {
}

我在想什么样的情况下会想要这个,如果有任何优势,这是什么。


扩展Thread和实现Runnable是无用的(Thread已经实现Runnable了)。您几乎总是希望实现Runnable(而不是扩展Thread)。这使您能够灵活地直接(不推荐)使用Thread或在java.util.concurrent中使用较新的ThreadPool实现(推荐)。


在这种特定的情况下,它不是很有用,因为其他海报已经解释了,很明显,Thread已经实现了Runnable

在某些情况下,"说明明显的"可能很有用,就像对类的用户的一个"提示":如果您有一个相当大的超级类和接口层次结构,具有多个继承级别(其中一些在第三方库中),那么将类声明为实现特定接口(即使是在H它通过定义实现它,因为它的超类已经实现了它或者实现了该接口的一个子类。

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


不,使用这种方法没有好处,因为线程类实现了可运行的接口。所以,如果类扩展了线程类。这意味着,它还实现了可运行的接口。

http://www.developerfusion.com/pix/articleimages/may05/javathread3.jpg


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


可运行接口意味着将一个作业分配给多个线程当线程类时,每个线程都有一个与之关联的唯一对象。