线程类被称为具有“IS-a”关系以及与可运行接口的“Has-a”关系。拥有这两个有什么好处?
为什么我们优先考虑“Has-a”关系?
答案 0 :(得分:5)
同时拥有这两者有什么好处?
这是一个糟糕的设计选择,IMO。避免Thread
首先实施Runnable
会更加清晰。这导致了各种错误(如Stack Overflow上的问题所见)人们在run
而不是Thread
上调用了start
。
为什么我们优先考虑“Has-a”关系?
组合通常比继承更灵活。例如,如果您创建Runnable
实施,则可以将其传递给ExecutorService
而不是Thread
。你并没有把自己绑定到执行动作的一种特定方式 - 你只是说“这是我想要运行的代码。”