实现Runnable与扩展线程

abs*_*son 10 java

为什么实现Runnable比从Thread类扩展更好?

Bil*_*l K 19

实际要点是,在任何有问题的情况下,工具总是优先考虑.

Extends非常紧密地绑定两个类文件,并且可能会导致很难处理代码.

当我第一次"理解"OO编程时,我正在扩展一切,但它将我的整个设计变成了糊涂.现在我只扩展了一些清楚而明显地通过"is-a"测试的东西,其他一切都是接口......

许多问题刚刚停止发生(混淆多重继承情况,时间浪费重构层次结构,倾向于拥有"受保护"变量然后想知道为什么它们在当前类中没有更改它们时会发生变化,链接构造函数的需求,搞清楚不同的继承树如何相互作用,......

似乎每3年(过去20年),我认为我真的"得到"编程并回顾3年前我做的愚蠢事情......这是其中一个例子(但是接近7年)以前在这一点上)


ewe*_*nli 8

这样,您可以计算(什么)与执行(何时和/或如何)分离.

使用Runnable或者Callable,您可以提交许多工作/计算,Executor以便安排工作.以下是ExecutorService的摘录形式:

pool = Executors.newFixedThreadPool(poolSize);
...
pool.execute(new Handler(serverSocket.accept()));
...
class Handler implements Runnable {
    ...
 }
Run Code Online (Sandbox Code Playgroud)

使用Runnable/ Callable可以更直接地使用Threads.