1. 程式人生 > >spring中使用多執行緒ThreadPoolTaskExecutor

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

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

雖然程式碼比起來下面還多了一丟丟.很少把程式碼改的更多.但是使用了執行緒池,系統的效率肯定會有很大的提高