Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候/为什么我应该在Java中使用多线程?_Java_Multithreading_Jsp_Jakarta Ee - Fatal编程技术网

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

什么时候/为什么我应该在Java中使用多线程?,java,multithreading,jsp,jakarta-ee,Java,Multithreading,Jsp,Jakarta Ee,我不知道什么时候应该在Java开发中使用多线程,以及使用它的逻辑/原因。它在不同的场景中有什么帮助 情景1 我正在制作一个有敌人的2D滚动游戏,还有一个所有的,想想金属弹头吧 情景2 我正在创建一个数据库守护进程来检查多个数据库内容 情景3 我正在为JSP制作一个servlet,其中包含一些从数据库获取的信息 请随意编辑场景以使其更好 另外:我应该为游戏服务器使用多线程吗?或者我不应该这样做?当您认为某些东西可以并行化或异步化时,请使用多线程 并行化例如:在构建Web爬虫时,您可以使用并行线程浏

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

情景1 我正在制作一个有敌人的2D滚动游戏,还有一个所有的,想想金属弹头吧

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

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

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


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

当您认为某些东西可以并行化或异步化时,请使用多线程

并行化例如:在构建Web爬虫时,您可以使用并行线程浏览不同的页面等。这也可能意味着更好地利用资源(CPU、I/O等)

在某种意义上讲是异步的,在productconsumer的情况下,您有一个代码块在生成内容,其余的代码块在使用它

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

出于两个不同的原因,您应该将程序更改为使用线程

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

    但是,很难确定您的程序是否会正确使用多个处理器,从而使程序的返工成为一项良好的投资。只有在涉及大量处理/计算的情况下,您才能获得速度提升。例如,如果您的程序正在等待IO(磁盘或网络读取或写入),那么您可能会花费大量工作将程序拆分为多个线程,但却看不到速度的提高

  • 当程序的多个部分应该同时运行时。并不是说它不能在一个线程中运行,而是这样做会更加复杂。例如,一个web服务器有多个请求处理线程,因为让每个线程处理一个请求更容易,即使您可能不会在服务器上加载太多的负载,多个线程也会使它执行得更快

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

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

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


编辑:

场景1-我正在制作一个2D滚动游戏,游戏中有敌人和所有这些,想想金属弹头吧

我没有一个好的答案。这取决于是否有大量渲染正在进行,也取决于您使用的工具包

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

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

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

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

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

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

-那你不应该。而且,如果你能避免,一定要这样做

时:例如:如果您需要同时从多个站点/资源获取不同股票的市场份额值,以更新不同的经纪人系统,您可能需要这样做,因为单个线程必须先从一个站点获取,然后再尝试从下一个站点获取

基于您在问题中的编辑-

我正在做一个2D滚动游戏,里面有敌人和一个全是 想想金属弹头


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

这并不是说你一旦学会了多线程,你就会随时随地使用它。需要时可以使用多线程

例如,您有一个很长的任务要做,并且您不想锁定UI,您可以在另一个线程上完成任务,而您的UI仍然工作良好。这将是一种情况


另一种方法是计算一些复杂的东西,这些东西可以在许多独立的步骤中完成,然后可以使用多线程并行完成。

假设您有一个负责下载文件的应用程序,如果您不使用多线程,所有其他指令都将等待文件完成下载。例如,Swing使用一个特殊的线程来显示他的gui,所以你们应该看看教程,读一点太普通的问题…@Sebastian Well。。。。我搜索了一下,发现了这个,但我对答案不满意。所以我以我想要的方式被问到。如果这个太宽,那么这个q也是