java中的多线程web应用程序
我正在做一个web应用程序,它的前端是Java,后端是shell脚本。概念是我需要在后端处理多个文件。我将从用户那里获得日期范围(例如从7月1日到8日),每天处理大约100个文件。所以我总共有800个文件要处理 我将从JSP获取这些详细信息,并将后台调用委托给shell脚本,然后返回结果并将其显示给用户 现在我用一种顺序的方法完成了所有这些——我的意思是没有线程。因此,只有一个主线程执行,用户必须等待800个文件按顺序处理。然而,这真的很慢。正因为如此,我在考虑寻找线索。由于我是一名线程初学者,我阅读了一些关于这方面的资料,我提出了以下想法: 当我读到线程时,工作必须被拆分。。我想把这张桌子分开 8天工作到4个线程,其中每个线程将执行2天工作java中的多线程web应用程序,java,multithreading,jsp,Java,Multithreading,Jsp,我正在做一个web应用程序,它的前端是Java,后端是shell脚本。概念是我需要在后端处理多个文件。我将从用户那里获得日期范围(例如从7月1日到8日),每天处理大约100个文件。所以我总共有800个文件要处理 我将从JSP获取这些详细信息,并将后台调用委托给shell脚本,然后返回结果并将其显示给用户 现在我用一种顺序的方法完成了所有这些——我的意思是没有线程。因此,只有一个主线程执行,用户必须等待800个文件按顺序处理。然而,这真的很慢。正因为如此,我在考虑寻找线索。由于我是一名线程初学者,
我想知道我是否遵循了正确的方法,我主要关注的是:
关于如何进行此操作的一些指导。举个例子就好了。谢谢。是的,您可以在多线程或任何高性能环境中运行长处理作业。您还应该使用Servlet 3.0异步请求处理来挂起请求线程,并等待长时间的处理任务完成
在web应用程序中创建线程不是一个好的解决方案。这是一个糟糕的设计,因为通常由容器(web服务器)负责该活动。所以我认为你必须找到另一个解决办法
我建议您将shell脚本放在cron中,计划每分钟运行一次,要“激活”它们,您可以触摸充当信号量的文件。在每次运行时,脚本都会验证web应用程序是否接触了信号量文件,如果是,则从这些文件中读取日期间隔,然后开始处理 改善用户体验的方法不是在Servlet级别对100000个线程进行并行化,而是提供视图的增量呈现。首先,根据MVC模式将应用程序分为多个层是很有用的 说到这里,你得看看怎么做
- 创建一个能够返回部分答案和最后一个答案的服务,这意味着所有可用数据都已返回。每个答案都可以并行计算,以提高性能
- 以增量方式填充网页,特别是通过调用此服务,该服务返回用于向DOM添加数据的JSON字符串。每次你得到一个答案,如果这是一个部分答案,你会再次呼叫提供先前序列号的服务