为什么 Thread 实现 Runnable?
当线程启动时,Java 线程的 run() 方法由该线程上的 JVM 调用。为了给线程一些事情做,你可以创建一个 Thread 的子类并重写它的 run() 方法,或者(首选)你可以为线程的构造函数提供一个 Runnable。没关系。
我正在制作Thread的子类并重写运行,我意识到我无法像预期的那样保护该方法,因为Thread.run()是公开的。然后我意识到了原因:它必须是公开的,因为Thread实现了Runnable。但是它为什么要实现Runnable呢?
这似乎不合逻辑。线程是可启动的(从当前线程),但您运行它的方式与运行()Runnable(从当前线程)的方式不同;线程自行运行(在其自己的线程上)。如果您确实手动调用了Thread的run方法,那么您就不会将其用作Thread,而只是一个重量级的Runnable。
由于设计的原因,任何有权访问 Thread 对象的代码都可以调用其公共运行方法,并可能戳入不打算公开或设计为以这种方式调用的代码。它还允许像这样非常奇特的事情:
Thread.currentThread.run();
线程实现 Runnable 是否有我没有看到的合法用途?