多线程优化接口效率
可以用多线程优化的大概有两种情况:
1、存在循环很耗时
2、存在不必要同步处理的耗时代码块(没有但是可以分析拆解出来的)
代码如下
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
多线程处理后需要数据返回
public List execute(List taskList){//比如taskList有20个任务数据需要处理ExecutorService executorService = Executors.newFixedThreadPool(10);// 提交多个任务Future<?>[] futures = new Future[taskList.size()];for (int i = 0; i < taskList.size(); i++) {final int taskId = i;futures[i] = executorService.submit(() -> {Object dm =taskList.get(taskId);/**执行任务开始**//**执行任务结束**/resultList.add("存放结果");});}// 关闭线程池executorService.shutdown();// 等待所有任务完成List resultList=new ArrayList(20);for (Future<?> future : futures) {try {resultList.add(future.get()); // 阻塞直到任务完成} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}}return resultList;}
不需要数据返回
public void execute(List taskList){//比如taskList有20个任务数据需要处理ExecutorService executorService = Executors.newFixedThreadPool(10);// 提交多个任务Future<?>[] futures = new Future[taskList.size()];for (int i = 0; i < taskList.size(); i++) {final int taskId = i;futures[i] = executorService.submit(() -> {Object dm =taskList.get(taskId);/**执行任务开始**//**执行任务结束**/resultList.add("存放结果");});}// 关闭线程池executorService.shutdown();// 等待所有任务完成for (Future<?> future : futures) {try {future.get(); // 阻塞直到任务完成} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}}}
分析每次处理的数据相似度,次数增大后重复率变高,可以加缓存进一步提高效率
根据数据结果的大小选择本地或者redis,
本地缓存参考,使用方式自行百度
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;