[英]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.