Springmvc執行緒池配置和使用
阿新 • • 發佈:2019-01-23
1.Springmvc執行緒池配置:
在spring上下文檔案ApplicationContext.xml中新增
<!-- 執行緒池配置 --> <bean id="threadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 核心執行緒數 --> <property name="corePoolSize" value="5" /> <!-- 最大執行緒數 --> <property name="maxPoolSize" value="30" /> <!-- 佇列最大長度 >=mainExecutor.maxSize --> <property name="queueCapacity" value="500" /> <!-- 執行緒池維護執行緒所允許的空閒時間 --> <property name="keepAliveSeconds" value="200" /> <!-- 執行緒池對拒絕任務(無執行緒可用)的處理策略 --> <property name="rejectedExecutionHandler"> <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /> </property> </bean>
2.執行緒池的使用:
在需要呼叫的業務service呼叫執行緒
1)先定義引用
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
2)我這邊操作的業務是給圖片壓縮 (這裡的picList是圖片集合,這裡當引數傳給執行緒類)
private void uploadPic(){ //圖片集合 List<String> picList=new ArrayList<String>(); //上傳圖片業務邏輯 ... //處理壓縮圖片任務 intLogger.info("DiseaseCourseInterface|uploadPic 當前執行緒數:"+taskExecutor.getActiveCount()); Schedule schedule=new Schedule(picList); taskExecutor.execute(schedule); }
3)建立一個執行緒類Schedule,處理壓縮圖片任務
public class Schedule implements Runnable{ //日誌 protected Logger logger = Logger.getLogger(this.getClass()); //引數處理 private List<String> picList; public Schedule(List<String> picList) { this.picList = picList; } @Override public void run() { logger.info("[Schedule][execute]method begin ..."); try { if(null!=picList&&picList.size()>0){ for (String pic : picList) { //可直接獲得圖片list,這裡處理壓縮圖片業務 ... } } } catch (Exception e) { logger.error("[Schedule][execute]method error..."); } logger.info("[Schedule][execute]method end ..."); } }