spring中使用多线程ThreadPoolTaskExecutor

本文介绍了一个从直接创建线程到使用Spring线程池ThreadPoolTaskExecutor的任务执行优化过程。通过实例展示了如何通过线程池减少资源消耗并提高系统效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

/**
	 * 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);
			}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值