首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时/为什么要在Java中使用多线程?

何时/为什么要在Java中使用多线程?
EN

Stack Overflow用户
提问于 2013-08-14 15:56:30
回答 5查看 16.9K关注 0票数 8

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

场景1

我在和敌人一起做2D滚动游戏,想想金属子弹

场景2

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

场景3

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

可以随意编辑场景,使其变得更好。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-14 16:00:48

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

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

  • 当程序运行速度大大加快,并更好地利用您正在运行的多CPU/核心体系结构时。我使用“显著”一词,因为经常添加线程会增加许多复杂性,因此20%的速度改进可能不值得。 但是,很难确定您的程序是否正确地使用了多个处理器,因此程序的重新工作是一项很好的投资。只有在涉及大量处理/计算的情况下,你才能得到提速。例如,如果您的程序正在等待IO (磁盘或网络读写),那么您可能会花费大量的工作将程序拆分成多个线程,但没有看到速度的提高。
  • 当您的程序有多个部分应该同时运行时。这并不是说它不能在一个线程中运行,但是这样做会更加复杂。例如,web服务器有多个请求处理线程,因为让每个线程处理单个请求更容易,即使您可能不会在服务器上加载大量的负载,从而使多个线程的执行速度更快。

此外:对于J2EE内容,我应该在什么时候在servlet中使用多线程?或者我不应该?

我认为上述同样的答案也适用。一般来说,servlet是设计用来快速返回的非常小的任务,所以对于它们来说,分叉线程是相对不寻常的。但是,如果一个servlet需要启动一个长期运行的任务,但您希望它返回一个“启动作业”类型的响应,那么就需要一个线程。

需要注意的是,在执行servlet时,上游处理程序可能已经在使用线程池,因此您不必做任何事情。

编辑:

场景1-我正在制作一个与敌人一起玩的2D滚动游戏,想想金属子弹。

我对此没有很好的答案。这取决于是否有大量的呈现,这取决于您正在使用的工具包。

场景2-我正在创建一个数据库守护进程来检查多个数据库内容。

您可能会被数据库IO绑定,所以多线程可能不会给您提供任何东西。同样,如果您有长时间运行的查询,如果短查询可以在其他线程上并行执行,则可能会得到一些改进。这还取决于数据库如何处理多个连接。

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

如果响应必须等待获取信息,那么就没有理由在另一个线程中这样做。但是,正如我前面提到的,如果servlet试图分叉在后台运行的某种数据库事务,那么您应该使用一个线程。

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

票数 9
EN

Stack Overflow用户

发布于 2013-08-14 16:01:07

我不知道什么时候应该在Java开发中使用多线程

-Then你不应该。此外,如果你能避免它,尽一切办法这样做。

When:一个示例:如果需要同时从多个站点/资源获取不同股票的市场份额值,以更新不同的代理系统,则可能需要先从一个站点获取单个线程,然后才能从下一个站点获取。

根据你在问题中的编辑-

塞纳里奥1:我在和敌人一起做2D滚动游戏,想想金属子弹

是的你可以。一个例子是在一个线程中加载资源,同时显示一个“加载.”另一个线程中屏幕上的动画。

票数 2
EN

Stack Overflow用户

发布于 2013-08-14 16:03:26

假设您有一个负责下载文件的应用程序,如果您不使用多个线程,所有其他指令都会等到文件完成后再下载。例如,Swing使用一个特殊的线程来显示他的gui,所以您应该看看教程并阅读一些并发性

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18236597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档