用Java多线程,将任务分步骤处理

在处理WEB请求时,为避免客户端堵塞并确保及时通知第三方服务器,采用定制任务和多线程异步处理。通过后台线程监控任务表,主线程负责任务分发,子线程执行任务。利用线程池限制并发数,实现系统配置友好。详细内容涉及线程池的使用和任务类型。
摘要由CSDN通过智能技术生成

场景简单,其实就是在做WEB请求的时候,处理的结果需要同时通知到一个第三方服务器,通知后再把结果返回给客户端。

现在这个通知只是一个简单通知,如果直接加在客户端请求里面,客户端会在请求第三方服务器时堵塞。另外为了客户端不能超时,所以通知失败后也不敢多次请求。

 

这里可以使用定制任务来解决这个问题,一个客户端请求后产生一个定制的任务,然后服务后台进行多线程的异步处理,这样就会大大减少客户端的请求时间,同样最大程度保证这个通知是及时成功给第三方的。

定制任务我们需要一张表,来存储任务。同时需要多线程来执行这些任务。至于谁来开启这些任务,你可以使用定时器:http://javacui.com/framework/24.html,也可以使用后台线程。因为定时器已经有示例了,这里来说下后台线程。

 

因为是WEB服务,在服务启动的时候注册一个启动监听:

?
1
2
3
4
5
6
<!-- 初始化系统需要的配置项 开始 -->
< listener >
  < display-name >webListener</ display-name >
  < listener-class >cn.com.vogue.listener.InitListener</ listener-class >
</ listener >
<!-- 初始化系统需要的配置项 结束 -->

然后我们来实现这个监听处理,主要任务就是开启一个后台线程,实时查询是否有需要执行的任务,有的话就分发任务给子线程。

同时为了系统的可配性,这个主线程是否开启做一个配置项,加载的时候判断一下即可:

?
1
isRunRulThread=0
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import  javax.servlet.ServletContextEvent;
import  javax.servlet.ServletContextListener;
import  org.slf4j.Logger;
import  org.slf4j.LoggerFactory;
import  cn.com.vogue.task.UrlTask;
import  cn.com.vogue.utils.ResourceUrl;
import  cn.com.vogue.utils.SpringFactory;
/**
  * 初始化
  */
public  class  InitListener  implements  ServletContextListener {
  private  static  Logger logger = LoggerFactory.getLogger(InitListener. class );
  public  void  contextDestroyed(ServletContextEvent sce) {
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值