使用场景
本地有一个List,需要把list中的每一条数据传第三方公司的A、B、C、D、E、F共六个接口。那么如果一个数据传给A、再传给B、…最后传给E,那么会耗费很长时间。如果开6个线程,每个线程只访问A-E中的一个接口,那么时间就会缩短6倍。
实现方式以及使用
- 定义一个线程池
import java.util.concurrent.*;
public class CommonThreadPool {
private static ExecutorService exec = new ThreadPoolExecutor(50, 100, 0L,
TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(10000),
new ThreadPoolExecutor.CallerRunsPolicy());
public static void execute(Runnable command) {
exec.execute(command);
}
public static Future submit(Runnable command) {
return exec.submit(command);
}
public static Future submit(Callable command) {
return exec.submit(command);
}
public static void shutdown(){
exec.shutdown();
}
}
- 使用
public String example (){
List<TempUser> tempUserList = new ArrayList<>();
List<ParentImpl> duHuiTiTingInsureList = new ArrayList<>();
duHuiTiTingInsureList.add(childOneImpl);
duHuiTiTingInsureList.add(childTwoImpl);
duHuiTiTingInsureList.add(childThreeImpl);
duHuiTiTingInsureList.add(childFourImpl);
duHuiTiTingInsureList.add(childFiveImpl);
duHuiTiTingInsureList.add(childSixImpl);
List<Future> futureList = new ArrayList<>();
List syncResultList = Collections.synchronizedList(tempUserList);
for (ParentImpl childImpl : duHuiTiTingInsureList) {
Future future = CommonThreadPool.submit(new Runnable() {
@Override
public void run() {
doSend(childImpl, syncResultList);
}
});
futureList.add(future);
}
try {
for (Future future : futureList) {
future.get();
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
log.info(e.getMessage());
log.info(e.getStackTrace().toString());
}
}
public void doSend(ParentImpl childImpl,List syncResultList){
for (TempUser tempUser: tempUserList) {
childImpl.request(tempUser)
}
}
效果展示
可以看到,在同一秒内,程序同时处理了6个接口请求
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)