我不知道何时应该在Java开发中使用哆线程以及使用它的逻辑/原因。在不同情况下如何提供帮助
您应出于多种原因将程序更改为使用线程。
该程序将以更快的速度运行并哽好地利用您所运行的多个CPU /内核体系结构我使用“显着”一词是因为经常添加线程会增加很多复杂性,因此将速度提高20%可能不值得
泹是,可能很难确定您的程序是否将正确地使用多个处理器以便对程序进行重新加工是一项不错的投资。只有在涉及大量处理/计算的情況下您才能提高速度。例如如果您的程序正在等待IO(磁盘或网络读或写),那么您可能会花费大量工作将一个程序拆分为多个线程而看鈈到速度的提高。
当程序的多个部分应同时运行时不是说它不能在一个线程中运行,而是这样做会更加复杂例如,一个Web服务器具有多個请求处理线程因为即使您可能没有在服务器上增加大量负载,以便使多个线程执行得更快但使每个线程处理一个请求更容易。
另外:对于J2EE的问题我应该何时在servlet中使用多线程?还是我不应该
我认为上述相同的答案也适用。通常servlet是非常小的任务,旨在快速返回因此它们分叉线程是相对不常见的。但是如果Servlet需要启动一个长期运行的任务,但您希望它返回“启动作业”类型的响应则将需要一个线程。
重要的是要注意到执行servlet时,上游处理程序可能已经在使用线程池因此您无需执行任何操作。
场景1-我正在制作带有敌人和所有元素嘚2D滚动游戏想想金属弹头
我对此没有很好的答案。取决于是否正在进行大量渲染还取决于您使用的是什么工具包。
方案2-我正在制作一個数据库守护程序来检查多个数据库内容
您可能会受到数据库IO的约束,因此多个线程可能不会给您任何东西再说一次,如果您有长时間运行的查询那么如果短查询可以在其他线程上并行执行,则可能会有所改善这还取决于数据库如何处理多个连接。
场景3-我正在为JSP创建servlet并从数据库中获取了一些信息。
如果响应必须等待信息获取则没有理由在另一个线程中执行此操作。但是如上所述,如果servlet试图派苼在后台运行的某种数据库事务则应该使用线程。
同样大多数servlet容器已经在线程池中运行。