在我的情况下,我应该使用线程池代替池吗?

时间:2013-01-29 21:35:40

标签: java pool

我有简单的塔防游戏。每个怪物都在它自己的线程中移动,所以当新的波浪出现时,大约有20个新线程被完成(从10到25,随机)。我记得像执行器类这样的东西,它在有很多短寿命线程的情况下很有用。就像我一样。所以我的问题是:

  1. 我应该使用线程池,它会增加多少性能?
  2. 我该如何实施?池应该是一个领域吗?

2 个答案:

答案 0 :(得分:3)

我会为每个怪物设置一个move()方法并定期调用它。这样你只有一个线程,它应该执行得很好。 BTW如果你愿意,一个线程可以使用ExecutorService。

答案 1 :(得分:1)

我认为假设波之间的间隔超过一秒是安全的,不是吗?否则,你的游戏将很难被击败。 ; - )

如果你产生如此少的线程(15-25个线程不是什么大问题),我不希望使用线程池会产生影响。就个人而言,我只会使用new Thread。您可以随时切换到ExecutorService,但我不认为您的方案中需要它。

在编写时,线程池是合理的,例如,必须处理数百个传入请求的Web服务器(假设每个请求都应在单独的线程中处理)。然后一个线程池可能会提高性能,但它最重要的优点是它是一种限制资源使用的便捷方式。

为什么呢?如果您只是在每个请求上生成一个新线程,那么如果同时有多个请求,您将很快就会耗尽资源。使用具有线程上限的线程池可防止发生这种情况。

(但是,在不了解应用程序的详细信息的情况下,从纯粹的设计角度来看,完全避免线程并将所有游戏逻辑保留在一个线程中绝对是您应该考虑的事情。它会使事情变得更简单。但同样,我没有详细信息。)