2012-01-21 91 views
10

我是Java中线程编程的新手,因此也是这个基本问题。 (我查了一下,也没有找到这个问题以前问)扩展Thread类和实现Runnable接口的场景

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

public class ThreadExample extends Thread implements Runnable { 
} 

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

回答

11

延伸Thread实施Runnable是无用的(Thread已经实现Runnable)。你几乎总是实施Runnable(和延长Thread)。这使您可以灵活地直接使用Thread(不推荐)或使用java.util.concurrent(推荐)中较新的ThreadPool实现之一。

4

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

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

4

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

一些案件,“说明明显”可能是有用的,虽然,只是作为一个“提醒”你的类的用户:如果你有超强的类和接口的一个相当大的层次,有几个层次继承(在第三方库,其中的一些)的,它可能是有用的帮手定义声明一个类为实现特定的接口,即使它实现它因为它的超已经实现,或实现的一个该界面的子类。

它特别适用于标记接口(有些人可能反对他们不应该被使用,他们是不好的做法 - 有时你没有完全控制环境),即没有实际实施的接口和只是旨在标记您的物体符合特殊功能(例如Cloneable)。在这种情况下,即使他们的父母已经有资格,每个允许的类别都可以更加明确,因此更有用。

-1

可运行接口意味着将一个作业分配给多个线程 而Thread类中的每个线程都有一个与其关联的唯一对象。当你需要需要延伸其他基类的更多的灵活性

+0

这绝不是远程正确的 –

+0

在尝试回答更多问题之前,请阅读[如何编写好的答案?](http://stackoverflow.com/help/how-to-answer)。 –

-1

实现可运行的接口将是优选的。

+0

在尝试回答更多问题之前,请阅读[如何编写好答案?](http://stackoverflow.com/help/how-to-answer)。 –

+0

我已经阅读过。请告诉我 - 我的回答中有什么错误? – rashedcs