实现Runnable与扩展Thread

这个问题在这里已经有了答案:

  • “实现可运行”与“扩展线程”40个答案

  • 通过这种方式,您可以计算( 即什么 )与执行( 何时和/或如何分开

    通过RunnableCallable ,您可以将许多工作/计算提交给Executor ,以便安排这些工作。 这是ExecutorService的一个摘录表单:

    pool = Executors.newFixedThreadPool(poolSize);
    ...
    pool.execute(new Handler(serverSocket.accept()));
    ...
    class Handler implements Runnable {
        ...
     }
    

    使用Runnable / Callable为您提供更直接使用线程的灵活性。


    实际的要点是,在任何有问题的情况下,贯彻始终优先于延伸。

    Extends绑定两个类文件非常密切,并可能导致一些相当难处理代码。

    当我第一次“理解”OO编程时,我一直在扩展所有事物,但它把我的整个设计变成了一团糟。 现在我只是扩展了几件明显而明显地通过了“is-a”测试的东西,其他所有东西都是一个接口。

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

    看起来每3年(过去20年),我认为我真的“获得”编程,并回顾3年前我所做的愚蠢事情......这是其中的一个例子(但接近7年在此之前)


    因为IS-A真的不是你想要的。 你的班级希望成为Runnable,但IS-A Thread感觉太强大了。 这就是继承所说的。 你真的只想实现run()方法,而不是Thread类中的所有其他关注点。

    这符合Scott Meyers在“更高效的C ++”中的非常好的建议:使非叶类抽象化。 替代接口,你就会发现。

    链接地址: http://www.djcxy.com/p/92063.html

    上一篇: Implementing Runnable vs. extending Thread

    下一篇: why there are two way of using thread in java?