通常可以通过两种方式创建线程
通过阅读所有教程,所有人都说实现Runnable接口总是好的,因为如果您通过extend(1st方法)创建,则无法扩展任何其他类。 同样,如果我们通过扩展来创建线程,那么每个线程都将创建新对象,而如果我们通过实现所有线程来创建线程,则将共享同一对象。
我的问题是实现Runnable是最好的选择,而扩展线程是一种不好的做法,为什么Java有此选项?我相信,如果通过扩展创建线程肯定会有一定的优势(我相信,当没有其他父类不是唯一的答案时,我们应该使用扩展线程方法)
预先感谢
答案 0 :(得分:4)
2018年,真正的答案是:根本不用裸金属线。
如今,我们有类似fork/join,futures或ExecutorService框架的抽象。
避免自己做线程!
如果这样做,您会认为“好旧”的继承性偏重。在这种情况下,可以归结为:不扩展线程,而是实现Runnable。当您可以改用extends
时,您不不想通过使用implements
来限制班级!
答案 1 :(得分:2)
这是一个设计决策,是何时应实现Runnable接口或何时应扩展线程。
答案 2 :(得分:0)
要更正,可以通过3种方式创建线程
3.使用Callable
界面
Java不允许一个类扩展多个类,以防止C / C ++中存在钻石问题。如果您确定自己的班级除了Thread
以外不会扩展其他任何班级,您可以从Thread类高兴地扩展,或者建议扩展Runnable
或Callable
接口
我相信,如果我们通过扩展来创建线程,肯定会有一定的优势
如果要为方法提供自定义实现,则可以获得扩展类的所有优点。