首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么线程不是期末考试?你为什么要延长线程?

为什么线程不是期末考试?你为什么要延长线程?
EN

Stack Overflow用户
提问于 2012-05-02 14:14:44
回答 6查看 2.2K关注 0票数 7

我把这个当成面试问题。

为什么线程不是期末考试?你为什么要延长线程?

我无法想出真实的用例。

EN

回答 6

Stack Overflow用户

发布于 2012-05-02 14:17:42

来自Oracle文档

有两种方法可以创建一个新的执行线程。一种是将类声明为线程的子类。此子类应重写类Thread的run方法。另一种创建线程的方法是声明实现Runnable接口的类。

所以答案是“您可能想要子类Thread来覆盖它的run()方法”。

引用的段落已经出现在Java文档中,可以追溯到JDK1.1。Java添加了其他用于管理并发性的方便类,最显著的是注释中提到的执行器,这可能会减少或消除扩展Thread的需要。但是,他们不能使它成为final,因为这会破坏向后兼容性。

就实际原因而言,我认为现在您可能希望扩展Thread而不是实现Runnable的唯一原因是覆盖它的方法而不是run()。例如,您可能希望添加日志记录或其他清理。

票数 10
EN

Stack Overflow用户

发布于 2012-05-02 14:34:01

这几乎是取自约翰·温特的评论,但我认为这是最好的答案。

我唯一能想到的扩展Thread的地方,而不是实现Runnable --或者更好的是,只使用带有FutureExecutorService --是需要重写Thread.interrupt()来进行一些清理的时候。否则,我看不出有什么实际的理由来实际扩展Thread

票数 2
EN

Stack Overflow用户

发布于 2012-05-02 14:18:11

两个案件:

  1. 创建一种新的Thread,可能是在完成后清理一些资源等。
  2. 重写run()方法,而不是向构造函数提供Runnable (注意:避免这种模式--这不是正确的方法)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10415541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档