有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (4) 个答案

  1. # 1 楼答案

    正如文章所指出的,它们都是“有效的”,尽管在一般情况下,您应该使用Runnable(或者如果需要参数/结果CallableFuture),而不是子类化Thread。正如您所指出的,这更灵活——它将执行的内容与执行它的人区分开来。在同一个实例中,扩展线程不必要地将这两个概念紧密地结合在一起,从而打破了single responsibility的OO原则

    有时,当API强制执行时,您必须将可执行代码作为线程的子类来实现。例如,运行时addShutdownHook(Thread)要求在关机时执行的代码注册为线程实例。但是,如果你没有处理这些特定的情况,那么一定要使用Runnable

  2. # 3 楼答案

    Jenkov强调,在子类或可运行实现之间进行选择取决于偏好

    他指的是thread pool pattern作为一个例子,说明为什么可运行接口实现更灵活。我支持他的原始假设,但主要是因为Runnable对象可以为Thread以外的类创建子类

    我不太明白,用java本机库ie构建线程子类会多么麻烦。 java.util.concurrent.ThreadPoolExecutor。我希望Jenkov能举个例子

  3. # 4 楼答案

    作者只是想告诉大家,根据他的说法,Runnable更容易与线程池一起使用。线程池的概念是,可以有固定数量的线程(比如10个)等待执行作业。如果所有10个线程都在忙于运行线程,那么未完成的工作可以排队,直到池中的其中一个线程空闲