public class ThreadPool {
public static ThreadPool threadPool;
Logger logger = LoggerFactory.getLogger(this.getClass());
//ExecutorService executorService = Executors.newFixedThreadPool(10);
// 核心线程
int corePoolSize = 8;
// 最大线程
int maximumPoolSize = 30;
// 线程空闲回收时间
int keepAliveTime = 5;
// 线程空闲回调时间单位
TimeUnit unit = TimeUnit.SECONDS;
// 队列大小
int queueSize = 3200;
//有界队列
BlockingQueue workQueue = new ArrayBlockingQueue<Runnable>(queueSize);
/* RejectedExecutionHandler handler = new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
if (!executor.isShutdown()){
try {
executor.getQueue().put(r);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};*/
ExecutorService executorService = new ThreadPoolExecutor(corePoolSize,maximumPoolSize,
keepAliveTime,unit,workQueue);
public static ThreadPool getInstance() {
if (threadPool == null) {
threadPool = new ThreadPool();
}
return threadPool;
}
public void run(Runnable r) {
executorService.execute(r);
}
}
public static ThreadPool threadPool;
Logger logger = LoggerFactory.getLogger(this.getClass());
ExecutorService executorService = Executors.newFixedThreadPool(10);
public static ThreadPool getInstance() {
if (threadPool == null) {
threadPool = new ThreadPool();
}
return threadPool;
}
public void run(Runnable r) {
executorService.execute(r);
}
@Component
public class JxlHistoricaData{
private final Logger logger = LoggerFactory.getLogger(JxlHistoricaDataProcess.class);
@Autowired
private IRiskOrdersDao riskOrdersDao;
@Autowired
private IRiskJxlBaseDataService riskJxlBaseDataService;
//每页显示条数
int PAGESIZE = 1000;
public void ProcessData(){
try {
//总条数
int orderCount = riskOrdersDao.selectRiskCount();
/*AtomicInteger count = new AtomicInteger(0);*/
CountDownLatch latch = new CountDownLatch(orderCount);
//总页数
int total = PageUtil.totalPage(orderCount, PAGESIZE);
for (int i = 1; i <= total; i++) {
PageHelper.startPage(i, PAGESIZE);
List<RiskOrders> riskOrders = riskOrdersDao.selectRiskResult();
riskOrders.forEach((riskOrder) -> {
ThreadPool.getInstance().run(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10);
String reqParams = riskOrder.getReqParams();
Map<String, Object> params = JSON.parseObject(reqParams, Map.class);
String userId = (null == params.get("userId") ? "" : params.get("userId").toString());
JxlRawCallsRequest request = new JxlRawCallsRequest();
request.setUserId(userId);
request.setCardNum(null == params.get("cardNum") ? "" : params.get("cardNum").toString());
request.setUserPhone(null == params.get("userPhone") ? "" : params.get("userPhone").toString());
request.setUserName(null == params.get("userName") ? "" : params.get("userName").toString());
request.setAct(ConstantRisk.JXL_RAW_CALLS);
request.setOrderType(ConstantRisk.JXL);
riskJxlBaseDataService.findRawCall(request);
/*if ("SUCCESS".equals("result")) {
count.getAndIncrement();
}*/
latch.countDown(); // 执行完毕,计数器减1
} catch (Exception e) {
e.printStackTrace();
}
}
});
});
}
try {
latch.await(); // 主线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
/*if (count.get() == orderCount) {
return SUCCESS;
}*/
logger.info("共处理聚信力报告数据"+orderCount+"条");
}catch (Exception e){
logger.error("处理聚信力报告数据异常=======》{}",e);
}
}
}
public static int totalPage(int totalCount, int pageSize) {
if (pageSize == 0) {
return 0;
} else {
return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
}
}