用Java创建线程可能是一个瓶颈吗?

时间:2011-12-11 16:03:53

标签: java multithreading performance

对于连续任务,例如渲染动画,每帧创建短期线程要比在开始时创建线程慢得多,然后暂停它们并重新开始?

或者差异可以忽略不计?

3 个答案:

答案 0 :(得分:9)

那会慢得多;线程开销很大。

您可以使用线程池重用线程并避免开销 但是,对于这样的短期任务,可能仍然不值得使用线程,因为上下文切换的成本将超过好处。

测量它!

答案 1 :(得分:2)

创建新线程会产生很大的开销。如果线程的活动非常短,则创建开销甚至可能大于实际执行时间。您将需要尽可能多地回收线程。

我建议使用ExecutorService

答案 2 :(得分:0)

由于创建开销,创建新线程不是最好的方法。您应该至少使用线程池而不是创建新线程(有关详细信息,请参阅Executor)。

线程的生命周期也很重要。如果它太短,性能可能会更糟,因为上下文切换开销。

另一个重点是你拥有的CPU /核心数量。作为一般规则,如果您的任务是CPU密集型的,那么每个核心应该使用1-2个线程(我认为这是您的情况)。如果您的任务是I / O密集型的话,你可以稍微推动这个数字(让我们说3-5个theads)。