Sam*_*aik 6 java multithreading language-design library-design runnable
当我们通过实现Runnable并将其传递给Thread构造函数来实现相同的功能时,允许用户通过扩展Thread类来创建线程的本质是什么.
Thread不同寻常之处在于它可以引用 来Runnable运行,但它本身也是Runnable. 默认情况下,Thread将使用自身作为Runnable运行实例,当然您可以将其指向其他位置。
我认为这都不是标记为ThreadFinal 并需要外部Runnable或使其可Thread扩展并使其成为自己的的充分理由Runnable。这两种方法都非常好,而且似乎没有一种比另一种更好。
如果我不得不猜测,进行子类化的原因Thread是它允许您编写如下代码:
Thread t = new Thread() {
public void run() {
/* ... your code here ... */
}
};
Run Code Online (Sandbox Code Playgroud)
这比创建 的子类Runnable然后将其包装在线程中要干净一些。类似地,您可以对 a 进行子类化Thread以获得Runnable明确指示它应该用作线程的 a 。当然,这主要是一个美观问题,如果 Java 设计者采取相反的方式,我认为这将是一个非常好的决定。