JAVA制线与制线的区别

JAVA制线与制线的区别,java,multithreading,Java,Multithreading,我今天刚开始学习Java中的线程。 到目前为止,我看到人们通常使用两种方法来创建它们,但我不理解它们之间的区别: 1: new Thread() { @Override public void run(){ //mycode goes here; }; }.start(); new Thread(new Runnable() { @Override public void run(){ //mycode goes here

我今天刚开始学习Java中的线程。 到目前为止,我看到人们通常使用两种方法来创建它们,但我不理解它们之间的区别:

1:

new Thread() {
    @Override
    public void run(){
        //mycode goes here;
    };
}.start();
new Thread(new Runnable() {
    @Override
    public void run(){
        //mycode goes here;
    }
}).start();
Thread t1 = new Thread(new MyRunnable());
MyThreadClass my1 = new MyThreadClass();
2:

new Thread() {
    @Override
    public void run(){
        //mycode goes here;
    };
}.start();
new Thread(new Runnable() {
    @Override
    public void run(){
        //mycode goes here;
    }
}).start();
Thread t1 = new Thread(new MyRunnable());
MyThreadClass my1 = new MyThreadClass();
那么,如果没有必要,为什么人们要使用
newrunnable()
?它只是强迫您使用
run()
方法,但如果您创建了线程,那么不自己创建run方法就不符合逻辑了?还是我错了

但是为什么在创建匿名线程时使用
newrunnable()
?就像上面的第二个例子?因为我看过一些教程,我在网上找到的。 我只是想问,这样做是否有原因

我知道线程也可以通过其他方式创建:
(我不是说实现vs扩展!)

3:

new Thread() {
    @Override
    public void run(){
        //mycode goes here;
    };
}.start();
new Thread(new Runnable() {
    @Override
    public void run(){
        //mycode goes here;
    }
}).start();
Thread t1 = new Thread(new MyRunnable());
MyThreadClass my1 = new MyThreadClass();
4:

new Thread() {
    @Override
    public void run(){
        //mycode goes here;
    };
}.start();
new Thread(new Runnable() {
    @Override
    public void run(){
        //mycode goes here;
    }
}).start();
Thread t1 = new Thread(new MyRunnable());
MyThreadClass my1 = new MyThreadClass();

在某些情况下,当您已经有一个
Runnable
的实例在另一个线程中运行时,它可能很有用。
例如
Runnable
s可用于导出命令设计模式

在您的情况下,没有理由创建
Runnable
,因为它没有添加任何内容

基本上,如果必须修改 线程的行为,然后您需要扩展线程类,否则 您只需运行一些单独的线程,然后就需要实现 该接口是可运行的


请参阅此处了解更多信息:

您可能听说过线程池;在这里,我们重用线程来处理不同的作业(读取可运行文件)。查看threadpoolexecutor API提交方法。这会给你一些想法。

它解释了为什么在一些场景中更喜欢使用runnable。我不是问喜欢什么,而是问人们为什么要使用新的runnable。与我的示例完全一样,我想知道在构造函数new Runnable中使用线程(我不是说使用MyRunnables)是否有区别Ty以获取信息。我还没有研究过Java8的Lamba表达式,但也看过类似的例子。谢谢,因为我还在学习Java并自己编程,words命令设计模式对我来说毫无意义。但如果你说它在某些情况下可能有用,gona请记住:)@Crazyjavahacking。。。我在这里的某个地方读到,请看这个你没有回答这个问题。他问了些别的问题。哦,真的,请不要这样,取消你的否决票。基本上你是对的:
extend
当可能更改现有代码时-
implement
当创建新代码时。然而,正如Crazyjavahacking所提到的,在讨论threadsm时,这并没有那么有用。