我不知道在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(使用前将#替换为@)