ThreadPoolTaskExecutor线程池使用示例
(2019-02-28 16:53:26)分类: java并发 |
简单示例
public class Test {
public static void main(String[] args) {
ThreadPoolTaskExecutor poolTaskExecutor= new ThreadPoolTaskExecutor();
poolTaskExecutor.initialize(); //必须初始化,否则报 ThreadPoolTaskExecutor not initialized
poolTaskExecutor.setCorePoolSize(10);//默认1
poolTaskExecutor.setMaxPoolSize(30);//默认2^32-1
List> writeSqMxftList = Lists.newArrayList();
Integer arr[]={1,2,3,4};
List list = Arrays.asList(arr);
for (Integer l : list) {
FutureTask ft = new FutureTask(new Callable() {
@Override
public Integer call() {
int nums = 0;
while (nums < 100) {
nums ++;
}
System.out.println(nums);
return nums;
}
});
writeSqMxftList.add(ft);
poolTaskExecutor.execute(ft);
}
int dataNums = 0;
for (FutureTask ft : writeSqMxftList) {
try {
dataNums += ft.get();
} catch (Exception e) {
}
}
System.out.println("dataNums"+dataNums);
//线程池使用完不销毁的话,它会一直保持连接状态
poolTaskExecutor.destroy();
}
}
执行结果
Connected to the target VM, address: '127.0.0.1:58579',
transport: 'socket'
16:43:51.734 [main] INFO
o.s.s.c.ThreadPoolTaskExecutor - Initializing
ExecutorService
100
100
100
100
dataNums400
16:43:54.225 [main] INFO
o.s.s.c.ThreadPoolTaskExecutor - Shutting down
ExecutorService
Disconnected from the target VM, address: '127.0.0.1:58579',
transport: 'socket'
项目实际应用:
// 多线程保存申请明细
List> writeSqMxftList = Lists.newArrayList();
for (final List sbjbjgdms : sbjbjgdmLt) {
FutureTask ft = new FutureTask(new Callable() {
@Override
public Integer call() {
paramMapRk.put("sbjbjgDms", sbjbjgdms);
int count = 0;
int nums = 0;
List pcsjList = null;
while (count < ZsSjrkfkConstants.WHILE_COUNT) {
// 分页获取上解反馈数据
pcsjList = SqlKit.on(nativeSqlRepository).sql(querySql).mapParams(paramMapRk)
.getObjectList(ZsJfmxFkPcsjDTO.class);
if (CollectionUtils.isNotEmpty(pcsjList)) {
if (EZsQzFkQdlx.DW.getCode().equals(qdlx)
|| EZsQzFkQdlx.DWZG.getCode().equals(qdlx)) {
zsDwSjfkService.saveSjfkPcsjByDTO(pcsjList, qdId, qdlx);
} else if (EZsQzFkQdlx.ZG.getCode().equals(qdlx)) {
zsZgSjfkService.saveSjfkPcsjByDTO(pcsjList, qdId);
} else if (EZsQzFkQdlx.CXJM_ZZJN.getCode().equals(qdlx)) {
zsCxjmSjfkService.saveSjfkPcsjByDTO(pcsjList, qdId, qdlx);
} else if (EZsQzFkQdlx.CXJM.getCode().equals(qdlx)) {
zsCxjmhzSjfkService.saveSjfkPcsjByDTO(pcsjList, qdId);
} else if (EZsQzFkQdlx.LHJYRY.getCode().equals(qdlx)) {
zsLhjySjfkService.saveSjfkPcsjByDTO(pcsjList, qdId);
} else if (EZsQzFkQdlx.CJDW.getCode().equals(qdlx)) {
zsCjdwSjfkService.saveSjfkPcsjByDTO(pcsjList, qdId, qdlx);
}
nums += pcsjList.size();
} else {
break;
}
count++;
}
return nums;
}
});
writeSqMxftList.add(ft);
sjxxfkfpTaskExecutor.execute(ft);
}
int dataNums = 0;
for (FutureTask ft : writeSqMxftList) {
try {
dataNums += ft.get();
} catch (Exception e) {
log.error(qdxxDTO.getQdLxMc() + qdxxDTO.getYwLxMc() + "多线程分批异常", e);
}
}
qdxxDTO.setClsjl(dataNums);
}