核心代码
自动以线程池
@Component
@Slf4j
public class ThreadPoolConfig {
@Bean
@Qualifier(value = "configurationCheckThreadPool")
public ExecutorService executorService(){
int nThreads = Runtime.getRuntime().availableProcessors();
log.info("可用运行线程为"+nThreads);
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("ConfigurationCheck-pool-%d").build();
ExecutorService configurationCheckThreadPool = new ThreadPoolExecutor(nThreads, 10,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
return configurationCheckThreadPool;
}
}
@Qualifier(value = "configurationCheckThreadPool")
private final ExecutorService executorService;
//解析JSON后文件映射
List<BDG_TASK_MANAGEMENT> bdg_task_managements = analysisJSONToObject(jsonArray);
//拆分入库
/**
* 使用多线程 483 时间戳
*/
long l = System.currentTimeMillis();
CopyOnWriteArrayList<FutureTask<Integer>> integers = new CopyOnWriteArrayList<>();
for (int i = 0; i < bdg_task_managements.size(); i++) {
int finalI = i;
FutureTask<Integer> integerFutureTask = new FutureTask<>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int insert = configurationCheckImpl.insert(bdg_task_managements.get(finalI));
return insert;
}
});
executorService.submit(integerFutureTask);
integers.add(integerFutureTask);
}
// AtomicReference<Boolean> aBoolean = new AtomicReference<>(true);
/**
* 4668 时间戳 parallelStream
* 5197 时间戳 Stream.parallel
*/
// bdg_task_managements.parallelStream().forEach(bdg_task_management -> {
// try {
// configurationCheckImpl.insert(bdg_task_management);
// } catch (Exception e) {
// e.printStackTrace();
// aBoolean.set(false);
// return;
// }
// });
/**
* 6497 时间戳
* 7365 时间戳
* 7094 时间戳
*/
// for (int i = 0; i < bdg_task_managements.size(); i++) {
// BDG_TASK_MANAGEMENT bdg_task_management = bdg_task_managements.get(i);
// try {
// configurationCheckImpl.insert(bdg_task_management);
// } catch (Exception e) {
// aBoolean.set(false);
// e.printStackTrace();
// }
// }
System.out.println(System.currentTimeMillis() - l);
// return aBoolean.get();
return true;