package project.futures.job; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import kernel.util.ThreadUtils; import project.futures.FuturesLock; import project.futures.FuturesOrder; import project.futures.FuturesOrderService; import project.syspara.SysparaService; public class FuturesOrderCalculationJob implements Runnable { private static final Logger logger = LoggerFactory.getLogger(FuturesOrderCalculationJob.class); private FuturesOrderService futuresOrderService; private FuturesOrderCalculationService futuresOrderCalculationService; private SysparaService sysparaService; public void run() { try { while (true) { try { List list = this.futuresOrderService.cacheSubmitted(); //每单处理的时间间隔(毫秒) int futures_cal_time = sysparaService.find("futures_cal_time").getInteger(); for (int i = 0; i < list.size(); i++) { FuturesOrder order = list.get(i); boolean lock = false; try { if (!FuturesLock.add(order.getOrder_no())) { continue; } lock = true; this.futuresOrderCalculationService.saveCalculation(order); } catch (Throwable e) { logger.error("error:", e); } finally { if (lock) { if (futures_cal_time>0) { /** * 每秒处理30个订单 */ ThreadUtils.sleep(futures_cal_time); } else { /** * 每秒处理200个订单 */ ThreadUtils.sleep(5); } FuturesLock.remove(order.getOrder_no()); } } } } catch (Throwable e) { logger.error("run fail", e); } finally { /** * 暂停0.1秒 */ ThreadUtils.sleep(1000); } } } catch (Throwable e) { logger.error("run fail", e); } finally{ ThreadUtils.sleep(1000); /** * 重新启动 */ new Thread(this, "FuturesOrderCalculationJob").start(); if (logger.isInfoEnabled()) { logger.info("交割合约持仓单盈亏计算线程启动!"); } } } public void start() { new Thread(this, "FuturesOrderCalculationJob").start(); if (logger.isInfoEnabled()) { logger.info("交割合约持仓单盈亏计算线程启动!"); } } public void setFuturesOrderCalculationService(FuturesOrderCalculationService futuresOrderCalculationService) { this.futuresOrderCalculationService = futuresOrderCalculationService; } public void setFuturesOrderService(FuturesOrderService futuresOrderService) { this.futuresOrderService = futuresOrderService; } public void setSysparaService(SysparaService sysparaService) { this.sysparaService = sysparaService; } }