spring中使用多线程ThreadPoolTaskExecutor

业务需要,在进行更新的时候会执行一系列操作,或者说更新时会有一个通知.但是没有使用消息队列.所以我想用多线程来实现这个功能.最开始没有使用线程池.使用的是内部类的形式实现,代码为:

/**
	 * 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的配置 .

	 
		
		
		
	 

.

   @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);
			}

虽然代码比起来下面还多了一丢丢.很少把代码改的更多.但是使用了线程池,系统的效率肯定会有很大的提高

你可能感兴趣的:(spring,springmvc)