何时/为何应在 Java 中使用多线程? [关闭]

2024-04-21

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

场景1

我正在制作一款带有敌人的 2D 卷轴游戏以及所有这些,想想合金弹头

场景2

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

场景3

我正在为 JSP 制作一个 servlet,并从数据库中获取一些信息。

请随意编辑场景以使其更好。

另外:游戏服务器应该使用多线程吗?或者我不应该?


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

出于多种不同的原因,您应该更改程序以使用线程。

  • 当程序运行速度明显加快并更好地利用您正在运行的多 CPU/核心架构时。我使用“显着”这个词是因为经常添加线程会增加很多复杂性,因此 20% 的速度提升可能不值得。

    然而,确定您的程序是否能够正确使用多个处理器可能很困难,因此程序的重新设计是一项很好的投资。只有涉及大量处理/计算,速度才会提高。例如,如果您的程序正在等待 IO(磁盘或网络读取或写入),那么您可能会花费大量工作将程序拆分为多个线程,但速度却没有提高。

  • 当程序的多个部分应该同时运行时。并不是说它不能在一个线程中运行,而是这样做会更复杂。例如,Web 服务器具有多个请求处理线程,因为让每个线程处理单个请求会更容易,即使您可能不会向服务器施加大量负载,以便多个线程使其执行速度更快。

另外:对于 J2EE 的东西有同样的问题,我什么时候应该在我的 servlet 中使用多线程?或者我不应该?

我认为上面的答案同样适用。一般来说,Servlet 是非常小的任务,旨在快速返回,因此它们分叉线程的情况相对不常见。但是,如果 servlet 需要启动一个长时间运行的任务,但您希望它返回“正在启动作业”类型的响应,则需要一个线程。

需要注意的是,当您的 servlet 执行时,上游处理程序可能已经在使用线程池,因此您无需执行任何操作。


Edit:

场景 1 - 我正在制作一个有敌人的 2D 卷轴游戏以及所有这些,想想合金弹头

对此我没有一个好的答案。取决于是否进行大量渲染以及您使用的工具包。

场景 2 - 我正在制作一个数据库守护程序来检查多个数据库内容。

您很可能会受到数据库 IO 的限制,因此多个线程可能不会给您带来任何帮助。话又说回来,如果您有长时间运行的查询,如果短查询可以在其他线程上并行执行,您可能会得到一些改进。这还取决于您的数据库如何处理多个连接。

场景 3 - 我正在为 JSP 制作一个 servlet,并从数据库中获取一些信息。

如果响应必须等待获取信息,则没有理由在另一个线程中执行此操作。然而,正如我上面提到的,如果 servlet 试图分叉某种在后台运行的数据库事务,那么您应该使用线程。

同样,大多数 Servlet 容器已经在线程池内运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时/为何应在 Java 中使用多线程? [关闭] 的相关文章

随机推荐

  • 通过“递归”策略进行合并

    我知道 git merge 递归实际上发生在有超过 1 个共同祖先的情况下 并且它将创建一个虚拟提交来合并这些共同祖先 然后再继续合并最近的提交 抱歉 我不确定是否应该有一个术语这 但我一直在尝试查找有关 git merge 递归策略实际如
  • 如何从所有应用程序加载 Django 装置?

    我在 Django 应用程序中使用固定装置 但只有两个应用程序加载了固定装置 当我使用 verbosity 2 手动运行 loaddata 时 我可以看到它只在两个应用程序中查找 尽管我在内部创建了更多的固定装置目录 所有应用程序均已正确安
  • django get_or_create 返回错误:“tuple”对象没有属性

    我是 django 新手 我正在尝试使用 get or create 模型函数 但即使我的模型中有该属性 我也会收到错误 AttributeError at professor adicionar compromisso tuple obj
  • 创建自定义颜色集 TinyMCE

    我已经能够为 TinyMCE 创建自己的字体颜色选择器 但是调色板链接到原始颜色选择器 我想做的是使我的自定义颜色选择器完全独立于原始颜色选择器 这样我可以同时显示两者 这是我当前的代码 这可以工作 但是两个按钮的调色板是相同的 tinym
  • Accept_nested_attributes_for :allow_destroy, :_destroy 不起作用

    我有一个 Rails 4 1 应用程序 它使用了一些值得注意的技术 简单的形式 茧 我在销毁嵌套属性的记录时遇到问题 基于一些冗长的研究 我相信我的代码是正确的 但是我可能遗漏了一些愚蠢的东西 Model has many staff se
  • 具有固定键的字典上的多线程

    我有一本带有固定键集合的字典 是我在程序开始时创建的 后来 我有一些线程用值更新字典 一旦线程启动 就不会添加或删除任何对 每个线程都有自己的密钥 意义 只有一个线程会访问某个键 该线程可能更新值 问题是 我应该锁定字典吗 UPDATE 谢
  • jQuery 的元素或类喜欢选择器?

    无论出于何种原因 我将这些课程称为 main sub1 main sub2等等 别介意为什么我不能拥有 main sub 有没有一种方法可以用 jQuery 来获取包含属性的类 main Using class main 将选择其类名的所有
  • wso2 svn 更新 - E205011:处理一个或多个外部定义时发生故障

    我在尝试着svn update4 0 0平台分支 却屡次碰到错误 E205011 Failure occurred processing one or more externals definitions My svn info outpu
  • 将字符串作为指针或文字传递时,strcmp() 返回值不一致

    我正在玩strcmp当我注意到这一点时 这是代码 include
  • 通过引用的部分数组

    我的问题很简单 是否可以像在 C 中那样 通过引用检索 VBA 中数组的两个部分 自从我用 C 编写代码以来已经有一段时间了 所以我不太记得我现在是怎么做的 如果我记得的话 也许我会举个例子 我想做的是按单个 Double 类型属性对对象数
  • C++中的随机函数

    有没有一个函数可以生成指定范围内的k个随机数 例如 我想要 5 个 0 到 100 之间的随机数 带或不带替换 你可以使用std generate n http en cppreference com w cpp algorithm gen
  • 如何在 Javascript 中使用 getter 和 setter

    有人可以向我解释一下为什么这段简单的代码不起作用吗 var user get name return this name set name value this name value user name David 当我将其放入 Firef
  • 从 Graph API 显示 [图像][url]

    构建 Facebook 视频应用程序 用户可以通过在应用程序og like中使用来收藏视频 I use response facebook gt api me og likes GET 我会得到 data object id 1399918
  • 如何在云中的 Ubuntu 20.04 上运行 Gnome 桌面

    在 Google 搜索在云实例上运行 Gnome 桌面或仅桌面 找到 Xfce4 信息 后 我在 Digital Ocean 找到了一些指南 例如 在 Ubuntu 20 04LTS 上安装和配置 VNC https www digital
  • 为什么在 bash 中睡眠并等待?

    我无法理解此服务的启动命令docker compose yml https github com wmnnd nginx certbot blob master docker compose yml yml 中的两行相关内容是 comman
  • 在类新实例上使用 Spring @Autowired

    我对Spring不太熟悉 我有以下情况 存储库类 Repository public class MyRepository 使用存储库类的类 public class MyClass extends AbstractClass Autowi
  • Mac DMG 怪事 - 签名和“损坏”的应用程序

    我的 Gatekeeper 设置是 App Store 和已识别的开发人员 我有一个带有签名应用程序的 DMG 当我安装 DMG 并在本地运行它时 它可以工作 当我将相同的 DMG 上传到我们的服务器 通过 http 下载它 通过 http
  • PHP - 如何更新 txt 文件中的 JSON 数据?

    这是保存在文件中的 JSON 数据示例data txt name yekky name mussie name jessecasicas many rows 我想更新该文件 使其看起来像这样 name yekky num 1 name mu
  • Pixel 2 XL 上的本机异常

    我在 Pixel 2 XL 上运行应用程序时遇到一些问题 昨天 它运行良好 并且该应用程序按预期在模拟器上运行 Behavior 应用程序第一次启动时可以正常工作 再次启动会导致本机代码出现异常 我的应用程序没有本机库 例外 2021 03
  • 何时/为何应在 Java 中使用多线程? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不知道在Java开发中什么时候应该使用多线程 以及使用它的逻辑 原因 它在不同的场景中有何帮助 场景1 我正在制作一款带有敌人的 2