java - 通过匿名类声明新线程的最佳方法是什么?
问题描述
我一直在检查一些关于 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。两者看起来都不错,也许我应该选择第一个选项?感谢您的评论和帮助。
解决方案
首先是创建一个匿名子类MyRunnable
。
第二个是创建一个匿名子类Thread
,它要求它MyRunnable
是可实例化的;并且MyRunnable
实际上根本不会使用,因为它没有在run()
您在Thread
子类中定义的方法中调用。
没有理由对子类进行子类Thread
化,并且可能您希望MyRunnable
基类具有一些特殊行为(尽管唯一会提供实际运行的特殊行为的是构造函数)。
使用第一种方式。
推荐阅读
- java - 如何使用 Twilio Java SDK 删除所有电话号码?
- selenium - 在 Gatling 场景中是否有可能使用 selenium 代码?
- python - 如何从有效图像中区分空图像?
- flutter - 在我的 Android 智能手机的 Documents 文件夹中写入一个文本文件
- php - WP 联系表不会在上传文件夹中保存具有权限 0755 的图像
- sharepoint - 使用 F# 的 Microsoft.Sharepoint.Client.Context.Load 错误
- sql - N1QL/Couchbase - 显示每天产生的所有事件,不知道表中可能有多少天
- python - 如何绘制这个 Keras CNN 模型的准确率和损失?
- javascript - Vue JS - 提交时复选框验证错误
- c - C - 以相同方式创建的两个结构,但具有不同的值,为什么?