解决方式:使用线程池+队列
项目基于Spring,如果不用spring需要自己把
ThreadPoolManager.java
改成单例模式
1.写一个Controller(Spring mvc)
/**
* @author HeyS1
* @date 2016/12/1
* @description
*/
@Controller
public class ThreadPoolController {
@Autowired
ThreadPoolManager tpm;
@RequestMapping("/pool")
public
@ResponseBody
Object test() {
for (int i = 0; i < 500; i++) {
//模拟并发500条记录
tpm.processOrders(Integer.toString(i));
}
return "ok";
}
}
2.线程池管理
/**
* @author HeyS1
* @date 2016/12/1
* @description threadPool订单线程池, 处理订单
* scheduler 调度线程池 用于处理订单线程池由于超出线程范围和队列容量而不能处理的订单
*/
@Component
public class ThreadPoolManager implements BeanFactoryAware {
private static Logger log = LoggerFactory.getLogger(ThreadPoolManager.class);
private BeanFactory factory;//用于从IOC里取对象
// 线程池维护线程的最少数量
private final static int CORE_POOL_SIZE = 2;
// 线程池维护线程的最大数量
private final static int MAX_POOL_SIZE = 10;
// 线程池维护线程所允许的空闲时间
p