JAVA并发编程篇--Future获取线程执行结果
1 创建合适的线程池:
创建线程池方式参考:https://blog..net/l123lgx/article/details/105731660
本文创建固定线程个数的线程池:
ExecutorService executorService = Executors.newFixedThreadPool(2);
2 包装Callble:
Callable<Map<String, Object>> commonUseQuatoCall = () -> testGetFutureMap("param");
3 包装future:
Future<Map<String, Object>> submitcommonCall = executorService.submit(commonUseQuatoCall);
4 阻塞获取执行结果:
Map<String, Object> commonUseQuatoData = null; try { commonUseQuatoData = submitcommonCall.get(50000, TimeUnit.MILLISECONDS); }catch (Exception ex){ executorService.shutdown(); } if (null != commonUseQuatoData){ /** * do some thing */ }
5 完整代码:
package org.lgx.bluegrass.bluegrasscoree.serviceimp.common; import javax.xml.ws.ServiceMode; import java.util.HashMap; import java.util.Map; import java.util.concurrent.*; /** * @Description TODO * @Date 2021/12/29 16:48 * @Author lgx * @Version 1.0 */ @Service public class FutureTasekServiceImpl { public void testFuture(){ ExecutorService executorService = Executors.newFixedThreadPool(1); Callable<Map<String, Object>> commonUseQuatoCall = () -> testGetFutureMap("param"); Future<Map<String, Object>> submitcommonCall = executorService.submit(commonUseQuatoCall); Map<String, Object> commonUseQuatoData = null; try { commonUseQuatoData = submitcommonCall.get(50000, TimeUnit.MILLISECONDS); }catch (Exception ex){ executorService.shutdown(); } if (null != commonUseQuatoData){ /** * do some thing */ } } private Map<String, Object> testGetFutureMap(String param) { // 处理业务逻辑 Map<String, Object> mapData = new HashMap<>(); /** * do some thing */ return mapData; } }