需求,几十张表数据复制一份。
步骤 条件查询- 修改字段 - 插入数据
如果一张表同步进行,肯定很慢。所以并行处理。
ExecutorService cusExcutor;
executor = new ThreadPoolExecutor(7,7,10, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10), customizableThreadFactory);
初始化七个。每个里面分别做操作
接收返回值。等所有的线程都跑完了,return responseDto
Future<Integer> future1 = executor.submit(() -> { SqlSession sqlSession0 = sqlSessionFactory.openSession(ExecutorType.BATCH, false); dataDictMapper = sqlSession0.getMapper(DataDictMapper.class); dicts = dataDictMapper.getDataDictByAreaId(otherAreaId); for ( DataDict dict : dicts) { dict.setAreaId(areaId); dataDictMapper.insertDictData(dict); } //dataDictMapper.insertDictDatas(dicts); sqlSession0.commit(); sqlSession0.close(); return 1; });
future1.get(); future2.get(); future3.get();
.get 能获取到,说明执行完了。
第二种阻塞就是计数器了。
private CountDownLatch latch = 线程池.sizi;
每个线程中执行完操作 latch.countDown();计数器减1
latch.await() 所有线程执行完毕 计数器为0则返回responseDto 否则阻塞等待。