ScheduledExecutorService

突然想起以前写的代码,处理的任务就是去平台查询订单状态,根据订单状态做后续处理。处理过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Order order = orderMapper.getOrder(orderId); // 从数据库查出订单
int status = order.getStatus();
int queryCount = 0;
while(true) {// 初始化状态
status = queryStatusFromPlatform(orderId); // 从平台查询订单状态
order.setStatus(status);
if(status == 0) {
sleep(500);// 线程停500ms
} else {
notify(order);
break;
}
if (queryCount >= 5) {
break;
}
}
// 通知第三方
private void notify(Order order) {
while(true) {
// 这里也是循环,发起通知,正确收到返回则停止,否则重试
sleep(500);
}
}

其实问题没什么大问题,但是当系统中任务比较多的时候,如果线程挂起,线程无法释放,会导致很多资源占用致使系统资源不足,可能会宕机 :smile

下面我们来用ScheduledExecutorService进行下改造!除了性能之外,代码会变得更优雅!做个有洁癖的程序员。

1
2
我知道是不会有人点的,但万一有人想不开呢!