为什么Thread类不是最终的?你为什么要延长线程?

use*_*434 6 java multithreading

我把这作为一个面试问题.

为什么Thread类不是最终的?你为什么要延长线程?

我无法想出现实世界的用例.

das*_*ght 10

来自Oracle的文档:

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

所以答案是"你可能想要子类Thread来覆盖它的run()方法."

引用的段落已经在Java文档中回溯到JDK 1.1.Java已经添加了其他方便的类来管理并发,最值得注意的是,注释中提到的执行程序,可能会减少或消除扩展的需要Thread.final然而,他们无法做到这一点,因为这会破坏向后兼容性.

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

  • 我发现如果Thread正在执行IO(即关闭套接字以中断读/写),覆盖interrupt()也会很有用. (5认同)