java Web项目中什么场景中会用到java多线程?

问:能不能简单描述一下你在java web开发中需要用到多线程编程的场景?

对多线程有些了解,但是不太清楚具体的应用场景,能简单说一下你遇到的多线程编程的场景吗?

回答一:

最典型的如:
1、用户注册完成送大礼包/积分之类,且积分等也是另一个系统并比较耗时;且这类任务即使失败也不是特别重要的。
2、后台线程:比如定期执行一些特殊任务,如定期更新配置文件,任务调度(如quartz),一些监控用于定期信息采集等。

回答二:

最典型的应用比如tomcat,tomcat内部采用的就是多线程,上百个客户端访问同一个web应用,tomcat接入后都是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用到我们的servlet程序,比如doGet或者doPost方法。

如果不采用多线程机制,上百个人同时访问一个web应用的时候,tomcat就得排队串行处理了,那样客户端根本是无法忍受那种访问速度的。

还有就是需要异步处理的时候,需要使用多线程。比如task a和task b要并行处理,单个线程只能串行处理,先做完task a然后再做task b。如果想要多个task同时执行的话,就必须为每个task分配一个线程,然后通过java虚拟机的线程调度,来同时执行多个任务。比如你的CPU是多核心的话,就可以让一个CPU执行一个线程。如果只有一个CPU的话,底层是按照分时复用的原则,各个线程按照时间片来获得CPU资源。

回答三:

特别耗时的操作,如备份数据库,可以开个线程执行备份,然后执行返回,前台不断向后台询问线程执行状态

问:JAVA项目中哪些场景需要用到多线程,深感迷茫,请使用过的高手指点。

答:

场景一:一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一条URL,这样效率会很低,假设验证一条需要1分钟,总共就需要1万分钟,有点恐怖。这时可以用多线程,将1万条URL分成50等份,开50个线程,没个线程只需验证200条,这样所有的线程执行完是远小于1万分钟的。

场景二:需要知道一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。

总之使用多线程就是为了充分利用cpu的资源,提高程序执行效率,当你发现一个业务逻辑执行效率特别低,耗时特别长,就可以考虑使用多线程。不过CPU执行哪个线程的时间和顺序是不确定的,即使设置了线程的优先级,因此使用多线程的风险也是比较大的,会出现很多预料不到的问题,一定要多熟悉概念,多构造不同的场景去测试才能够掌握!

时间: 2024-10-01 13:34:07

java Web项目中什么场景中会用到java多线程?的相关文章

云服务器 ECS 建站教程:手工部署Java Web项目

手工部署Java Web项目 Tomcat 一个开源的且免费的 Java Web 服务器,常用来作为 web 开发的工具.它可以托管由 servlet,JSP 页面(动态内容),HTML 页面,javascript,样式表,图像(静态内容)组成的 Java Web 应用程序. 此外,将来随着业务的扩展,您可以利用阿里云强大的产品平台,平滑地横向和纵向扩展服务容量,例如: 扩展单个 ECS 实例的 CPU 和内存规格,增强服务器的处理能力. 增加多台 ECS 实例,并利用负载均衡,在多个实例中进行

Java Web项目中使用Socket通信多线程、长连接的方法_java

很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应. 先看一下web的监听代码: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class

java web项目中jsp页面表单提交给servlet 然后显示空白页面

问题描述 java web项目中jsp页面表单提交给servlet 然后显示空白页面 经检查 servlet没问题 全查可以用 不知道什么原因 求解答 解决方案 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈解决了 解决方案二: jsp页面显示空白

源代码- java web 项目中,如何实现显示的页面带关键字搜索功能

问题描述 java web 项目中,如何实现显示的页面带关键字搜索功能 我有一个关键字表 表结构如下 Id ID 关键字 Keywords 链接 Link 优先级 priority 0 默认 1初级 2中级 3高级 匹配次数 mateCount 0全文匹配 1只为第一个出现的关键字匹配 里面的数据格式为 ID Keywords Link priority mateCount 1 龙投网 http://www.lootou.cn 3 0 2 股票入门 http://www.lootou.cn/gu

就像这样子的就可以啦-跪求一份简单文本编辑器插件,能copy在java web项目中就能运行的那一种

问题描述 跪求一份简单文本编辑器插件,能copy在java web项目中就能运行的那一种 解决方案 http://kindeditor.net/demo.php 解决方案二: http://kindeditor.net/demo.php http://ueditor.baidu.com/website/onlinedemo.html http://ckeditor.com/demo

java web项目中应用的服务器推送技术都有哪些?有没有性能问题

问题描述 java web项目中应用的服务器推送技术都有哪些?有没有性能问题 java web项目中应用的服务器推送技术都有哪些?有没有性能问题 解决方案 Web实时推送,选择GoEasy推送服务, 代码简单易懂,几分钟就可以自己写好一个在线聊天demo. 中英文文档齐全.官网:https://goeasy.io 解决方案二: 目前,websocket是个很好的方向. 解决方案三: websocket. http://blog.csdn.net/jiangcs520/article/detail

java web项目在tomcat中运行时报错,tomcat正常运行

问题描述 java web项目在tomcat中运行时报错,tomcat正常运行 严重: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener java.lang.AbstractMethodError: org.apache.crimson.tree.ElementNode2.getTextContent()Ljava/lan

Java Web项目中连接Access数据库的配置方法_JSP编程

老师决定期末考试采用access数据库实现增删改查,我认为现在的我已经没有问题了,但是以前都是在JSP页面中连接access数据库,无论是以下的那种方式都进行了连接的练习,但是现在我想让我的项目中的访问access数据库的java代码,封装到DAO中,在DAO中连接数据库,没有和Servlet API有任何的关系.对于大多数人都会优先选择使用ODBC数据源的方式或者是使用绝对路径的方式连接access数据库,但是我个人认为,这样做不太好,如果采用这样的方式,项目做好后,放到他人的服务器上是无法运

封装-java web项目中用户实体类定义

问题描述 java web项目中用户实体类定义 在java web项目中,都有用户信息封装在用户实体类中.然后在控制类中多个方法都需要调用这个用户实体类.那么,第一种方案:我可以将这个用户实体类定义成全局变量,并在第一次登录的时候赋值,然后在之后的方法中就可以直接调用该全局变量.第二种方案:在登录的时候将用户实体类存入session中,然后在其他方法调用时,从session中取出该实体.请问这两种方案应该用哪种?如果是第二种,那是否应该将该用户实体定义为全局变量,然后在每次需要调用时,从sess

java web+jqgrid+打印-针对java web项目中报表,使用什么技术实现报表打印功能效果好?求赐教最佳实践

问题描述 针对java web项目中报表,使用什么技术实现报表打印功能效果好?求赐教最佳实践 javaweb项目,其中含有三级表头,使用的是html5怎样实现打印可以跨浏览器并保持报表的格式不变 解决方案 http://blog.csdn.net/zhouyingge1104/article/details/8508145 解决方案二: amchar,highchar,好多图行图标插件. 解决方案三: 用浏览器自带的打印功能直接打印 解决方案四: 我的项目的报表比较复杂,使用的jqgird,浏览