为什么'extends Thread'存在,当'implements Runnable'在所有情况下都是赢家时

rah*_*hul 16 java multithreading runnable java-threads

我知道这 implements Runnableextends Thread Java线程更受欢迎,因为它允许我们在需要时扩展其他类.但如果是这样的话,它extends Thread也有自己的优势implements Runnable,如果是的话,这些优势是什么?

Stu*_*ske 32

因为有时候(几乎从不,但有时候)你想要能够改变它的基本行为Thread.

那时你需要扩展它.

你可以通过从Thread类中重写一个方法来改变它,你不能通过实现一个方法来实现它Runnable.

  • 示例[这里](http://stackoverflow.com/questions/34905333/in-run-method-how-to-find-from-where-start-was-called/34905821#34905821) - 提问者想知道哪个线程创建/启动此线程.覆盖构造函数和`start`来执行此操作. (7认同)

Pet*_*rey 19

自Java 1.0发布以来的最近20多年,被认为是一种优秀的设计模式已经发生了变化.但是,Java致力于向后兼容,这意味着可能使用不良设计模式的旧代码仍然有效.

我的一个宠物讨厌是StringBuffer让它的方法同步,几十年前被替换它从来都不是一个好主意,但不幸的是开发人员今天没有被禁止使用它,甚至新的开发人员也使用它,即使它被弃用了早在他们开始使用Java之前.

  • 阻塞runnables和线程之间的选择与"设计模式"无关,这没有任何意义.这是两种不同的用例场景 (2认同)