Java 代码优化:将 GIS 数据处理代码放在线程池中执行

以下代码展示了如何将 GIS 数据处理代码放在线程池中执行,以提升程序的并发性能,提高效率。

原始代码

try (HttpResponse response = HttpUtil.createGet(geometryUrl).form(gisDto).execute()) {
    if(response.getStatus()!=200){
        throw new BizException('gis异常');
    }
    String s = response.body().toString();
    Dict dict = JSON.parseObject(s, Dict.class);

    JSONArray jsonArray = (JSONArray) dict.get('data');

    return jsonArray.stream()
            .map(obj -> (JSONObject) obj)
            .peek(jsonObject -> {
                JSONObject geometry = jsonObject.getJSONObject('geometry');
                JSONArray pointsArray = geometry.getJSONArray('points');
                JSONArray innerArray = new JSONArray(pointsArray.size());
                for (int i = 0; i < pointsArray.size(); i++) {
                    JSONArray innerPointsArray = pointsArray.getJSONArray(i);
                    JSONArray pointArray = new JSONArray(innerPointsArray.size());
                    for (int j = 0; j < innerPointsArray.size(); j++) {
                        JSONObject pointObj = innerPointsArray.getJSONObject(j);
                        double x = pointObj.getDouble('x');
                        double y = pointObj.getDouble('y');
                        JSONArray innerPointArray = new JSONArray(2);
                        innerPointArray.add(x);
                        innerPointArray.add(y);
                        pointArray.add(innerPointArray);
                    }
                    innerArray.add(pointArray);
                }
                geometry.put('points', innerArray);
            })
            .collect(Collectors.toCollection(JSONArray::new));
} catch (Exception e) {
    log.debug(e.getMessage());
    throw e;
}

使用线程池优化代码

  1. 创建实现了 Runnable 接口的类,将原始代码放在该类的 run() 方法中:
public class GisTask implements Runnable {
    
    private String geometryUrl;
    private GisDto gisDto;
    
    public GisTask(String geometryUrl, GisDto gisDto) {
        this.geometryUrl = geometryUrl;
        this.gisDto = gisDto;
    }

    @Override
    public void run() {
        try (HttpResponse response = HttpUtil.createGet(geometryUrl).form(gisDto).execute()) {
            // 省略代码
        } catch (Exception e) {
            log.debug(e.getMessage());
            throw e;
        }
    }
}
  1. 创建线程池:
// 创建一个线程池,最大线程数为 10
ExecutorService executorService = Executors.newFixedThreadPool(10);
  1. 将任务提交到线程池中执行:
// 将任务提交到线程池中执行
executorService.submit(new GisTask(geometryUrl, gisDto));

总结

通过将 GIS 数据处理代码放在线程池中执行,可以有效提高程序的并发性能,提升效率。线程池可以管理线程的创建和销毁,避免频繁创建和销毁线程带来的性能损耗,同时可以控制线程数量,避免过多的线程占用系统资源。

Java 代码优化:将 GIS 数据处理代码放在线程池中执行

原文地址: https://www.cveoy.top/t/topic/okzJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录