我有简单的塔防游戏。每个怪物都在自己的线程中移动,因此当新浪潮到来时,大约有 20 个新线程完成(从 10 到 25,随机)。我记得像 executor 类这样的东西,它在存在许多短期线程的情况下很有用。就像我一样。所以我的问题是:
- 我应该使用线程池吗?它会提高多少性能?
- 我应该如何实施?pool 应该是一个字段吗?
我会为每个怪物设置一个 move() 方法并定期调用它。这样你只有一个线程,它应该执行得很好。顺便说一句,如果您愿意,一个线程可以使用 ExecutorService。
我认为可以安全地假设波之间的间隔超过一秒,不是吗?否则,您的游戏将很难被击败。;-)
如果你产生这么少的线程(15-25 个线程没什么大不了的),我不希望使用线程池会有所作为。就个人而言,我只会使用new Thread
. 您可以随时切换到ExecutorService
更高版本,但我认为您的场景不需要它。
当您编写时,线程池是合理的,例如,必须处理数百个传入请求的 Web 服务器(假设每个请求应在单独的线程中处理)。那么线程池可能会提高性能,但它最重要的优点是它是一种限制资源使用的便捷方式。
为什么?如果您只是在每个请求上生成一个新线程,那么如果同时有许多请求,您可能很快就会耗尽资源。使用具有线程上限的线程池可以防止这种情况发生。
(但是,在不了解您的应用程序细节的情况下,从纯粹的设计角度来看,完全避免线程并将所有游戏逻辑保留在一个线程中绝对是您应该考虑的事情。这会使事情变得更简单。但同样,我不'没有详细信息。)