扩展Thread类和实现Runnable接口的场景

时间:2012-01-21 22:57:24

标签: java multithreading runnable

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

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

public class ThreadExample extends Thread implements Runnable {
}

我想知道这种情况会是什么样的,如果这有什么好处,那又是什么呢。

5 个答案:

答案 0 :(得分:12)

扩展Thread 实施Runnable是无用的(Thread已经实现Runnable)。您几乎始终希望实现Runnable(并且扩展Thread)。这使您可以灵活地直接使用Thread(不推荐)或使用ThreadPool中的一个较新的java.util.concurrent实现(推荐)。

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

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

一些的情况下,“说明显而易见的”可能是有用的,就像对类的用户的“提醒”:如果你有一个相当大的超类和接口层次结构,具有多个继承级别(其中一些在第三方库中),它可以作为帮助器将类声明为实现特定接口,即使它按照定义实现它,因为它超类已经实现了它或者实现了该接口的一个子类。

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

答案 3 :(得分:-1)

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

答案 4 :(得分:-1)

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