业务需要,在进行更新的时候会执行一系列操作,或者说更新时会有一个通知.但是没有使用消息队列.所以我想用多线程来实现这个功能.最开始没有使用线程池.使用的是内部类的形式实现,代码为:
/**
* create by :
* description: 开启接单时-查询是否有还没配货的订单.进行配货
* create time: 14:59 2018/9/19
*/
private class InReceiptThread extends Thread{
private Long dsId;
InReceiptThread(Long dsId) {
this.dsId = dsId;
}
@Override
public void run() {
deliveryStaffService.allotDeliveryStaff(dsId);
}
}
调用代码
if("1".equals(workStatus)) {
deliveryStaff.setReceiveType(DeliveryStaff.RECEIVE_TYPE_YES);
new InReceiptThread(Long.parseLong(dsId)).start();
} else {
deliveryStaff.setReceiveType(DeliveryStaff.RECEIVE_TYPE_NO);
}
虽然实现了功能.但是每次都开一个线程终究是不合适的,所以查了一下查到了spring自带的线程池ThreadPoolTaskExecutor
改过后的代码
springmvc的配置 .
<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="${thread.corePoolSize}" />
<property name="maxPoolSize" value="${thread.maxPoolSize}" />
<property name="queueCapacity" value="${thread.queueCapacity}" />
</bean>
.
@Resource(name="threadPoolTaskExecutor")
private ThreadPoolTaskExecutor executor;
/**
* create by :
* description: 开启接单时-查询是否有还没配货的订单.进行配货
* create time: 14:59 2018/9/19
*/
private class InReceiptRunnable implements Runnable{
private Long dsId;
InReceiptRunnable(Long dsId) {
this.dsId = dsId;
}
@Override
public void run() {
deliveryStaffService.allotDeliveryStaff(dsId);
}
}
调用:
if("1".equals(workStatus)) {
deliveryStaff.setReceiveType(DeliveryStaff.RECEIVE_TYPE_YES);
executor.execute(new InReceiptRunnable(Long.parseLong(dsId)));
} else {
deliveryStaff.setReceiveType(DeliveryStaff.RECEIVE_TYPE_NO);
}
虽然代码比起来下面还多了一丢丢.很少把代码改的更多.但是使用了线程池,系统的效率肯定会有很大的提高