<p>@GetMapping(&quot;/queryCarsByCoachID&quot;)
public Result<Object> queryCarsByCoachID(Coach coach, HttpServletRequest request) {</p>
<pre><code>//权限验证
String token = (String)request.getAttribute(&quot;claims_coach&quot;);
if(token == null || &quot;&quot;.equals(token)){
    throw new RuntimeException(&quot;权限不足!&quot;);
}

//把查询到的的对象放入map集合
Map&lt;String,Object&gt; map = new HashMap&lt;&gt;();

//调用方法查询出设备
List&lt;DeviceEntityDto&gt; deviceEntityDtoList = coachService.queryDeviceEntitiesByCoachIdAndCarModel(coach.getCoachId());

// 创建一个线程池
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

// 创建一个CountDownLatch,用于线程同步
CountDownLatch countDownLatch = new CountDownLatch(deviceEntityDtoList.size());

for (DeviceEntityDto deviceEntityDto : deviceEntityDtoList){
    executorService.execute(() -&gt; {
        //获得此车辆的地址经纬度
        if (!StringUtils.isEmpty(deviceEntityDto.getArea())){
            Map&lt;String,String&gt; addressMap = tengXunMapService.getLongitudeAndLatitudeByAddress(deviceEntityDto.getArea());
            if (!CollectionUtils.isEmpty(addressMap)){
                deviceEntityDto.setLongitude(addressMap.get(&quot;lng&quot;));
                deviceEntityDto.setLatitude(addressMap.get(&quot;lat&quot;));
            }
        }

        //游戏端传递当前设备状态,显示状态(工作中/休息中)
        boolean existUser = ExternalCommunicationKit.existUser(deviceEntityDto.getDeviceId());
        deviceEntityDto.setWorkStatus(existUser ? 1 :0);

        // 线程执行完毕后,计数减一
        countDownLatch.countDown();
    });
}

try {
    // 等待所有线程执行完毕
    countDownLatch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
} finally {
    // 关闭线程池
    executorService.shutdown();
}

map.put(&quot;deviceEntities&quot;,deviceEntityDtoList);

//查询到学员传给前端
log.info(&quot;查询车辆成功!&quot;);
return new Result&lt;&gt;(ResultCode.SUCCESS,map);
</code></pre>
<p>}</p>
提升查询车辆信息速度:使用多线程优化地址转换

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

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