<分区>
我不知道什么时候应该在Java开发中使用多线程,以及使用它的逻辑/原因。它在不同情况下有何帮助?
场景一
我正在制作一个带有敌人的 2D 滚动游戏等等,想想金属弹头
场景2
我正在制作一个数据库守护进程来检查多个数据库内容。
场景 3
我正在为 JSP 制作一个 servlet,其中包含从数据库中获取的一些信息。
请随意编辑场景以使其变得更好。
另外:我应该为游戏服务器使用多线程吗?或者我不应该?
<分区>
我不知道什么时候应该在Java开发中使用多线程,以及使用它的逻辑/原因。它在不同情况下有何帮助?
我正在制作一个带有敌人的 2D 滚动游戏等等,想想金属弹头
我正在制作一个数据库守护进程来检查多个数据库内容。
我正在为 JSP 制作一个 servlet,其中包含从数据库中获取的一些信息。
请随意编辑场景以使其变得更好。
另外:我应该为游戏服务器使用多线程吗?或者我不应该?
最佳答案
I don't know when I should use Multithread in Java development, and the logic/reason of using it. How does it help in different scenarios?
出于几个不同的原因,您应该更改您的程序以使用线程。
当程序运行速度显着加快并更好地利用您正在运行的多 CPU/核心架构时。我使用“显着”这个词是因为经常添加线程会增加很多复杂性,因此 20% 的速度提升可能不值得。
但是,要确定您的程序是否会正确使用多个处理器可能很困难,因此重新编写程序是一项不错的投资。只有涉及大量处理/计算时,您才能提高速度。例如,如果您的程序正在等待 IO(磁盘或网络读取或写入),那么您可能会花费大量工作将程序拆分为多个线程,但速度并没有提高。
当您的程序的多个部分应该同时运行时。并不是说它不能在一个线程中运行,而是这样做会更复杂。例如,Web 服务器有多个请求处理线程,因为让每个线程处理单个请求会更容易,即使您可能不会通过服务器施加大量负载,这样多个线程会使其执行速度更快。
In addition: The same question for J2EE stuff, when should I use multithread in my servlets? Or should I not?
我认为上述答案同样适用。通常,servlet 是非常小的任务,旨在快速返回,因此它们 fork 线程相对不常见。但是,如果有一个 servlet 需要启动的长时间运行的任务,但您希望它返回“启 Action 业”类型的响应,那么线程将是必要的。
请务必注意,在您的 servlet 执行时,上游处理程序可能已经在使用线程池,因此您无需执行任何操作。
编辑:
Scenario 1 - I'm making a 2D scrolling game with enemies and a all that, think of metal slug
对此我没有很好的答案。取决于是否有大量渲染正在进行,这取决于您使用的是什么工具包。
Scenario 2 - I'm making a database daemon to check multiple database content.
您很可能会受到数据库 IO 的限制,因此多线程可能不会给您带来任何好处。话又说回来,如果您有长时间运行的查询,如果短查询可以在其他线程上并行执行,您可能会得到一些改进。这也取决于您的数据库如何处理多个连接。
Scenario 3 - I'm making a servlet for JSP, with some information fetched from the database.
如果响应必须等待获取信息,则没有理由在另一个线程中执行此操作。但是,正如我在上面提到的,如果 servlet 试图 fork 某种在后台运行的数据库事务,那么您应该使用线程。
同样,大多数 servlet 容器已经在线程池中运行。
关于java - 什么时候/为什么我应该在 Java 中使用多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236597/