我是Java的线程编程的新手,因此这个基本问题。 (我检查过,但之前没有找到这个问题)
我读到可以通过继承Thread类或实现Runnable接口来创建线程。 我看到了一个同一类的代码。
public class ThreadExample extends Thread implements Runnable {
}
我想知道这种情况会是什么样的,如果这有什么好处,那又是什么呢。
答案 0 :(得分:12)
扩展Thread
和实施Runnable
是无用的(Thread
已经实现Runnable
)。您几乎始终希望实现Runnable
(并且不扩展Thread
)。这使您可以灵活地直接使用Thread
(不推荐)或使用ThreadPool
中的一个较新的java.util.concurrent
实现(推荐)。
答案 1 :(得分:4)
不,使用这种方法没有优势,因为,Thread类实现了Runnable接口。所以,如果你的类扩展了Thread类。这意味着,它还实现了Runnable接口。
答案 2 :(得分:4)
在这种特殊情况下,它并不是很有用,因为其他海报已经解释了Thread
已经实现Runnable
的相当明显。
在一些的情况下,“说明显而易见的”可能是有用的,就像对类的用户的“提醒”:如果你有一个相当大的超类和接口层次结构,具有多个继承级别(其中一些在第三方库中),它可以作为帮助器将类声明为实现特定接口,即使它按照定义实现它,因为它超类已经实现了它或者实现了该接口的一个子类。
它特别适用于标记接口(有些人可能反对它们根本不应该被使用,而且它们是不好的做法 - 有时你不能完全控制环境),即与没有实际的实现,只是为了标记您的对象有资格获得特殊功能(例如Cloneable
)。在这种情况下,标记每个允许的类,即使他们的父母已经符合条件,也可以更明确,更有用。
答案 3 :(得分:-1)
Runnable接口意味着将一个作业分配给多个线程 在Thread类中,每个线程都有一个与之关联的唯一对象。
答案 4 :(得分:-1)
当您需要更灵活地扩展其他基类时,实现可运行的接口会更好。