我们可以使用Implementing Runnable或扩展线程类来创建线程。任何人都可以告诉我性能明智哪个更快地实现Runnable或扩展Thread类以及为什么?另外我知道在实现Runnable时,我们可以实现更多的接口并扩展一个类。如果我们直接扩展一个Thread类,那么扩展一个类是我们失去的东西。但在这两种情况下是否有任何性能差异性能明智,实现Runnable或扩展Thread类的速度更快
回答
表现方面两者没有区别。然而,使用“implements Runnable”更好,因为它给你更多的自由(扩展另一个类,...),同一个对象在多个线程之间共享(这也减少了使用的内存)。
这只是故事的一点。延长线程风险更大 – Stultuske
这个解释很薄。这不是关于“自由”,而是关于正确的建模。并且(实际上)永远不会将在线程内部运行的内容建模为线程。 “表现”是一种红鲱鱼,只有在正确性被理解之前才在这个层面上被问到。 –
这取决于(一如既往):
- 如果你想运行它只有一次,
Thread
扩展没有缺点,除了它是不够灵活,更难测试(例如,在一个单元测试)。 - 如果您想更频繁地运行它,
Runnable
会更灵活,因为您可以使用线程池将它传递给Executor
。通过这样做,您可以获得更好的性能,因为每次执行的线程创建开销都将被删除。
如果实现Runnable
你有不同的方式(在单元测试同步,使用执行,或者即使有Thread
包装也无妨),以执行代码。而纯粹的线程扩展永远不会有更好的性能,它只能是平等的。仅通过允许多个接口或使用独立继承来实现Runnable
总是更好的选择,这只是更好的设计。在此之后我绝不会延伸Thread
。
问题是,如果您的类型是_is-a_'Thread',那么您在* Thread中运行的内容应该只扩展'Thread',而不是。不过,它是_is-a_'Runnable'。所以问题不是“哪个表现更好?”这是一个可怕的问题。一个很好的问题是,“哪个是正确的?”和“哪个会导致更少的错误?”正确的工程每次都会带来不确定的微观“优化”。做对,让“表演”自己照顾自己。 –
- 1. 无法在Thread类扩展到同步两个线程,但实现Runnable接口
- 2. 哪个更好:实现一个可运行的接口或扩展Thread类
- 3. Android - MyCustomView扩展SurfaceView实现Runnable,OnTouchListener
- 4. 实现Runnable与扩展线程
- 5. 明智的方式来扩展requests.Response类?
- 6. 定时器不能在扩展SurfaceView的类中运行,并且实现了Runnable
- 7. 性能迅速扩展
- 8. 是否有任何Visual Studio扩展使“快速查看”对话更智能?
- 9. 哪个图像扩展对质量和性能(速度)更好?
- 10. Runnable,Thread,RunOnUIThread
- 11. Java扩展线程不工作,但实现了Runnable。我不明白为什么?
- 12. 快速numpy阵列扩展
- 13. 可扩展数据集的可序列化或可扩展性,哪个更快更实用?
- 14. Java - 实现Runnable行为与扩展线程相比
- 15. 快速ArcSin实现或在c近似#
- 16. 智能卡访问速度
- 17. 增强combobox扩展速度
- 18. JOIN或子查询速度更快吗?
- 19. 更改ISO或快门速度
- 20. 在python的扩展类中实现timeit()
- 21. 快速代码以获得WPF视觉DirectX纹理(性能明智)
- 22. 为什么Facebook上的智能搜索速度如此之快
- 23. 快速求幂的实现
- 24. 扩展不变类型(或:恒定类型快速缓存)OCaml中
- 25. LocalDateTime扩展功能和智能铸件
- 26. 哪些功能运行速度更快?
- 27. 在属性上实现绑定扩展
- 28. Activiti如何实现可扩展性
- 29. Apache AirFlow如何实现可扩展性?
- 30. 实现接口扩展属性(?继承)
这不是性能问题。没有可衡量的差异。应该首选Runnable,因为你应该使用像Executor这样的新并发类,而不是Thread。这些都采用Runnables。这有一个很好的理由。 – duffymo
我认为关于“性能”没有实际的区别(你的意思是什么?执行速度更快,内存消耗更好?)。 Class和Interface的主要原因之一是在Java中你不能有多重继承,所以根据你的设计,你的类可能已经扩展了另一个类,而你所需要的只是实现Runnable。 –
我的意思是执行速度更快。我知道在实现Runnable时,我们可以实现更多的接口并扩展一个类。如果我们直接扩展一个Thread类,那么扩展一个类是我们失去的东西。但是在这两种情况下是否有任何性能差异 – user2821056