java - 何时通过扩展创建线程
问题描述
通常可以通过两种方式创建线程
- 扩展线程类
- 实现一个可运行接口
通过阅读所有教程,所有人都说实现一个 Runnable 接口总是好的,因为如果你通过扩展(第一种方法)创建你不能扩展任何其他类,我同意。而且,如果我们通过扩展创建线程,那么每个线程都将创建新对象,而如果我们通过实现所有线程来创建线程,则所有线程将共享同一个对象。
我的问题是,如果实现 Runnable 是最好的选择,而扩展线程是不好的做法,为什么 java 有这个选项?我相信如果我们通过扩展创建线程肯定会有一些优势(我相信我们应该使用扩展线程方法,当没有其他父类时不是唯一的答案)
提前致谢
解决方案
2018 年,真正的答案是:你根本不使用裸金属线程。
如今,我们有诸如fork/join、futures或ExecutorService框架之类的抽象。
避免自己做线程!
如果你这样做,你会考虑“好旧的” Favor Composition 而不是继承。在这种情况下,归结为:不要扩展线程,而是实现 Runnable。您不想通过使用 , 来限制您的课程extends
,而您可以逃脱implements
!
推荐阅读
- turbo-c++ - Is there any way by which I can select my own hex colors to draw graphics in TURBO C++?
- php - Call function to exit gracefully when script timeout reached
- c# - 如何使用 emgucv/opencv/Aforge.Net/Accord.Net 在 50-100 毫秒内实时检测仪表中的指示器和状态(ON-OFF、颜色、闪烁)
- c - 大于或等于 C 中与浮点数的比较
- oracle - 在 Oracle 上插入 AdonisJS 中的错误。这样做的正确方法是什么?
- flutter - 从 Future 函数返回值到 Flutter 中的 onPressed 方法
- python - 我可以在ride.py 生成的代码中添加我自己的代码吗?
- jquery - 响应式中断在 jQuery 网格选项卡中不起作用
- php - 使用 rest api 提交表单时正在跳过验证
- git - Git忽略yml文件