2012-04-07 70 views
2

似乎有许多不同的方法可以创建线程(Runnable vs Thread类)和ThreadPools。最高效的Java线程技术?

在效率方面有什么区别,哪些是在Java中创建和汇集线程的最高效(就性能而言)技术?

+5

这取决于你的用例。 – Jeffrey 2012-04-07 03:01:48

+0

你需要做什么? – dash1e 2012-04-07 03:10:45

+0

@ dash1e,我一般问。每种技术有哪些不同的最佳场景? – user997112 2012-04-07 03:22:11

回答

0

在一天结束时,他们都依靠相同的底层Thread机制来实际完成工作。这意味着如果你问“什么是启动单线程的最有效方法?”答案是,创建一个Thread对象并调用start(),因为在最终创建Thread对象并在其上调用start()之前,任何其他方法都会采取其他一些步骤。

这并不意味着这是产生线程的最佳方式,它只是意味着它是从Java代码中最低级的方式。创建线程的其他方式为您提供了不同类型的基础结构来管理底层Thread,因此您选择的方法应取决于您所需的基础架构数量和种类。

3

如果您需要处理很多短而频繁的请求,最好使用ThreadPool,这样您可以重新使用已打开的线程并为其分配Runnable任务。

但是,当您需要为单个任务操作启动线程或实例化一个运行所有应用程序时间或长时间运行的守护程序线程时,最好创建一个线程并终止它,不再需要它了。

+0

对不起,我知道这一点。我基本上要求的是Thread比实现Runnable更快,然后,使用ThreadPool技术,它们在性能方面有什么不同? – user997112 2012-04-07 03:31:05

+0

扩展一个Thread或创建一个并分配一个Runnable的差异是微不足道的。在第一种情况下,您创建一个java对象并启动线程,在第二个创建Runnable的对象中,创建一个带有Runnable的线程并启动它。如果你所处理的任务不是持续的(如果你需要启动一个线程,则不需要结束),这两个解决方案之间的差异并不重要。 – dash1e 2012-04-07 03:37:38