首页 > 解决方案 > 通过匿名类声明新线程的最佳方法是什么?

问题描述

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

    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();

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

标签: javaconstructorinner-classesjava-threadsanonymous-class

解决方案


首先是创建一个匿名子类MyRunnable

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

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

使用第一种方式。


推荐阅读