我把这个当成面试问题。
为什么线程不是期末考试?你为什么要延长线程?
我无法想出真实的用例。
发布于 2012-05-02 14:17:42
来自Oracle文档
有两种方法可以创建一个新的执行线程。一种是将类声明为线程的子类。此子类应重写类Thread的run方法。另一种创建线程的方法是声明实现Runnable接口的类。
所以答案是“您可能想要子类Thread来覆盖它的run()方法”。
引用的段落已经出现在Java文档中,可以追溯到JDK1.1。Java添加了其他用于管理并发性的方便类,最显著的是注释中提到的执行器,这可能会减少或消除扩展Thread的需要。但是,他们不能使它成为final,因为这会破坏向后兼容性。
就实际原因而言,我认为现在您可能希望扩展Thread而不是实现Runnable的唯一原因是覆盖它的方法而不是run()。例如,您可能希望添加日志记录或其他清理。
发布于 2012-05-02 14:34:01
这几乎是取自约翰·温特的评论,但我认为这是最好的答案。
我唯一能想到的扩展Thread的地方,而不是实现Runnable --或者更好的是,只使用带有Future的ExecutorService --是需要重写Thread.interrupt()来进行一些清理的时候。否则,我看不出有什么实际的理由来实际扩展Thread。
发布于 2012-05-02 14:18:11
两个案件:
Thread,可能是在完成后清理一些资源等。run()方法,而不是向构造函数提供Runnable (注意:避免这种模式--这不是正确的方法)https://stackoverflow.com/questions/10415541
复制相似问题