java - 什么时候/为什么我应该在 Java 中使用多线程?

标签 java multithreading jsp jakarta-ee

<分区>

我不知道什么时候应该在Java开发中使用多线程,以及使用它的逻辑/原因。它在不同情况下有何帮助?

场景一

我正在制作一个带有敌人的 2D 滚动游戏等等,想想金属弹头

场景2

我正在制作一个数据库守护进程来检查多个数据库内容。

场景 3

我正在为 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/

相关文章:

java - user.dir 在 Intellij IDEA 中没有正确解析

java - 在 Java 中按值对映射进行排序

java - 如何获取已应用的 Spring Boot (auto) 配置列表

java - 使用 jquery 或 jsp 或 javascript 在 html 中显示 Windows 目录结构。

java - 合并两个ArrayList

c# - 确保线程安全

multithreading - 强制 perl 程序使用线程使用所有 CPU 容量

multithreading - F# MailboxProcessor 问题

apache - JSP:获取观众的IP

jsp - liferay jsp渲染到其他jsp