什么时候应该在Java中扩展线程?

什么时候应该在Java中扩展线程?,java,multithreading,runnable,Java,Multithreading,Runnable,我知道多线程的基础知识。此外,我提到了Jon Skeet先生的这一答复 他在这里说: 您并不是真正专门研究线程的行为。你只是 让它跑起来。(因此使用Runnable而不是Thread) 所以我的问题是: 在哪种情况下,一个人会专门处理一个线程? 什么时候应该在Java中扩展线程? 如果能给我一个例子和代码的答案,我将不胜感激 谢谢 将Runnable视为要执行的任务,将线程视为执行者。如果你想给executor添加一些特定的行为,比如,控制它的生命周期,修改状态等等,你应该扩展Thread。你可

我知道多线程的基础知识。此外,我提到了Jon Skeet先生的这一答复

他在这里说:

您并不是真正专门研究线程的行为。你只是 让它跑起来。(因此使用Runnable而不是Thread)

所以我的问题是:

在哪种情况下,一个人会专门处理一个线程?

什么时候应该在Java中扩展线程?

如果能给我一个例子和代码的答案,我将不胜感激


谢谢

Runnable
视为要执行的任务,将
线程
视为执行者。如果你想给executor添加一些特定的行为,比如,控制它的生命周期,修改状态等等,你应该扩展
Thread
。你可以在
JDK
中找到一个从
Thread
派生的类的例子(看一看),
Android SDK
(看一看).

一种可能的情况是 当您的类是childclass时,即具有超类,在这种情况下您不能扩展线程,您必须实现可运行接口
如果类不是子类,则可以扩展Thread类

我能想到的一件事是:如果您想要有多个线程,默认情况下,这些线程会有一个特定的名称或优先级,那么您可以扩展
Thread

public class MyThread extends Thread {

    public MyThread() {
        super("MyThread");
        setPriority(Thread.MIN_PRIORITY);
    }

    @Override
    public void run() {
        // something
    }
}

或者,如果要执行更多与
线程
对象本身相关的操作。通常,除了实现
Runnable
并使用将其作为参数的构造函数创建
线程
之外,您不需要做任何其他事情。

我没有否决它,但如果您需要其他默认值,您可以创建一个工厂方法,而不是创建一个子类。@JimmyT。是的,或者只是使用一些
执行器
。这只是可以做的一件事。