繁体   English   中英

通过匿名 class 声明新线程的最佳方法是什么?

[英]What's the best way to declare a new thread via an anonymous class?

我一直在检查 Java 中有关线程的一些技术资料,当我用匿名 class 定义线程时(在构造函数定义中正确使用括号),我对一个特定问题有点困惑。 常规声明将是这个:

    Thread myRunnableThread3 = new Thread(new MyRunnable(){
        @Override
        public void run() {
            System.out.println("myRunnableThread3!");
        }
    });
    myRunnableThread3.start();

只是出于实验目的,我尝试了这个:

    Thread myRunnableThread3 = new Thread(new MyRunnable()){
        @Override
        public void run() {
            System.out.println("myRunnableThread3!");
        }
    };
    myRunnableThread3.start();

如您所见,两者看起来非常相似,output 控制台也是一样的。 那么,我错过了什么吗? 也许还有一点我还没有意识到的功能差异。 顺便说一句,我正在使用 Java Corretto 11。两者看起来都不错,也许我应该将 go 作为第一个选项? 感谢您的评论和帮助。

第一个是创建MyRunnable的匿名子类。

第二个是创建Thread的匿名子类,它要求MyRunnable是可实例化的; 并且MyRunnable实际上根本不会被使用,因为它没有在您在Thread子类中定义的run()方法中调用。

没有理由对Thread进行子类化,并且可能您希望从MyRunnable基础 class 中获得一些特殊行为(尽管唯一会提供实际运行的特殊行为的是构造函数)。

使用第一种方式。

您还可以使用 lambda 表达式来启动线程。

Thread myRunnableThread3 = new Thread(()-> {
    System.out.println(Thread.currentThread().getName());
    System.out.println("myRunnableThread3!");},"MyThread");

    
myRunnableThread3.start();

印刷

MyThread
myRunnableThread3!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM