Java 游戏开发中的多线程问题?

Java 游戏开发中的多线程问题?,java,multithreading,lwjgl,game-development,Java,Multithreading,Lwjgl,Game Development,我正在用LWJGL3编写一个游戏,对多线程的概念有一些疑问 问题1:我知道,如果因为增加的复杂性而不需要多线程,那么不应该添加多线程,但是何时以及如何知道需要多线程 问题2:它是您在开发之初就添加的,还是在需要时稍后添加的 问题3:在进行多线程处理时,具体面临哪些编码挑战。我正在考虑在我的游戏中分离主线程和渲染线程,但我不确定为什么多线程会使这变得更加困难。我知道你不能保证一个线程需要多长时间才能运行,但是如果你有两个线程在执行逻辑,而不是一个执行逻辑,另一个执行渲染,那么这只会是一个问题 问题

我正在用LWJGL3编写一个游戏,对多线程的概念有一些疑问

问题1:我知道,如果因为增加的复杂性而不需要多线程,那么不应该添加多线程,但是何时以及如何知道需要多线程

问题2:它是您在开发之初就添加的,还是在需要时稍后添加的

问题3:在进行多线程处理时,具体面临哪些编码挑战。我正在考虑在我的游戏中分离主线程和渲染线程,但我不确定为什么多线程会使这变得更加困难。我知道你不能保证一个线程需要多长时间才能运行,但是如果你有两个线程在执行逻辑,而不是一个执行逻辑,另一个执行渲染,那么这只会是一个问题

问题4:使用消息队列在适合游戏的线程之间进行通信,还是这太过分了


如果你能分享任何你认为有用的好资源,那就太好了。

Q1:通常当某些处理需要一段时间而你不想挂起你的UI时,你会使用多线程。如果您的所有代码都在主线程上,那么在耗时的进程开始和结束之间,您的UI将变得无响应。如果您需要进行任何网络调用,您肯定需要将它们放在不同的线程上,而Android和Swift甚至不允许您在主线程上执行网络调用

问题2:只要你这么做,这没什么大不了的。如果你知道你要使用它,你可以在执行的时候实现它,但是事实上,没有什么能阻止你使用多线程

问题3:许多编码挑战都与数据计时和避免任何空指针有关,因为如果您试图访问的数据尚未到达,您的应用程序可能会崩溃。完成处理程序有助于确保某些功能仅在数据到达后发生


问题4:如果你的意思是像在线程之间一致地传递所有数据一样,这有点不必要,那么你只需要在某个时间点传递所需的数据。

谢谢你提供了非常翔实的答案。我知道您只会在线程之间传递所需的数据,但我发现了很多关于使用消息队列(如RabbitMQ)在线程之间通信的文章,但大多数文章都假设您为应用程序而不是游戏制作了一个相对较大的后端。所以我想我是在问我是否应该使用RabbitMQ之类的东西,或者对于这样简单的东西来说,这是不必要的。如果是简单的东西,消息队列可能是不必要的。完成处理程序应该足够了。