Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用匿名类启动线程合法吗?_Java_Multithreading - Fatal编程技术网

Java 使用匿名类启动线程合法吗?

Java 使用匿名类启动线程合法吗?,java,multithreading,Java,Multithreading,通常要启动线程,我们要么扩展thread类,要么实现Runnable接口并重写run()方法。但在下面的代码中,我们并没有执行上面的任何操作,事实上,它使用匿名类来创建线程。在java中启动线程真的是一种好的/合法的/可取的方法吗 Thread thread = new Thread(new Runnable() { @Override public void run() { } }); thread.start(); 这是一种不好的方法,因为需要为每个线程

通常要启动线程,我们要么扩展thread类,要么实现Runnable接口并重写run()方法。但在下面的代码中,我们并没有执行上面的任何操作,事实上,它使用匿名类来创建线程。在java中启动线程真的是一种好的/合法的/可取的方法吗

  Thread thread = new Thread(new Runnable() {

    @Override
    public void run() {

    }

});

thread.start();

这是一种不好的方法,因为需要为每个线程复制/粘贴run方法


这与为什么使用方法/类而不是将所有代码放在一个文件中的原因是一样的。

我这样做有两个原因

  • 学习如何使用匿名线程
  • 当我有一个线程具有可预测的行为,我可以保证在线程内完成
    否则,我会避免这种结构。

    伙计,这完全取决于您的需求,可能存在需要访问外部类的私有变量的用例,因此您使用了内部匿名类。关于生成新线程,假设您将其用于特定目的,比如网络调用,在这种情况下,您应该在设计线程池时正确使用它,并使用一个生成有限数量的线程,而不考虑网络请求的数量

    在java中启动线程真的是一种好的/合法的/可取的方法吗

      Thread thread = new Thread(new Runnable() {
    
        @Override
        public void run() {
    
        }
    
    });
    
    thread.start();
    
    好吗?- 它是否好取决于您的需求,如果您需要一个线程来以一种fire and forget的方式运行一些重功能,那么它可能是好的

    合法?-这是合法的-此代码编译和运行正常

    可取吗?不太可取,这可能是基于意见,但我建议与和一起使用