线程和Runnable

4

我看到过这样的说法,创建新线程最好使用Runnable接口而不是扩展Thread类。如果这是真的,那么为什么Java还允许我们扩展Thread类呢?为什么不将其设置为final


可能是["implements Runnable" vs. "extends Thread"]的重复问题 (https://dev59.com/onRB5IYBdhLWcg3wtZMV) - p.campbell
3个回答

4
由于你正在制作的东西几乎肯定不是一个线程。它是一个ThingTheDoesSomeUsefulWork,你碰巧希望它在单独的线程上执行这些有用的工作。假设我正在编写一个每30秒轮询Web服务器的程序。 ThingThatPollsWebServer 是一个线程吗?还是仅仅是一个轮询Web服务器的东西。
此外,将其制作成Runnable可以更容易地进行测试,并且使您能够灵活地在不使用线程或使用执行器框架的情况下运行您的应用程序。

这如何回答我的问题?你似乎只推荐实现Runnable接口,那继承Thread呢? - Swaranga Sarma
是的,因为这是正确的事情!只有在想要专门化其行为时才扩展线程。 - dty

1

你可能想要改变线程的行为或添加额外的功能。如果是这种情况,那么扩展Thread类是最合适的。


没错。引用的语句并不是绝对正确的,所以把它当作真理然后想知道为什么Thread类的设计没有遵循它是有些误导的。 - erickson
你是对的。但是你多久看到 Thread 被子类化并不仅仅是为了实现 run 方法? - user381105
顺便问一下,如果我想要改变 Class 或者 String 的行为应该怎么做呢?不,先生。那是错误的逻辑。 - user381105

-2

使用线程是旧的方式(在Java 5.0之前)使用线程:)。看一下ExecutorService类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接