我想知道在这种特定情况下使用CachedThreadPoolFixedThreadPool
用户登录到应用程序时。将获得大约10个地址的地址列表。我需要执行以下操作:

  • 将地址转换为我称之为google api的纬度和经度
  • 借助Google的api
  • ,还可以获取上述获取的经纬度与用户当前位置之间的距离

    因此,我创建了一个实现GetDistanceRunnable类-在该类中,我首先调用google api并解析resposne以获取各自的纬度和经度,然后调用并解析另一个google api的结果以获取行驶距离。
    private void getDistanceOfAllAddresses(List<Items> itemsList) {
        ExecutorService exService = newCachedThreadPool(); //Executors.newFixedThreadPool(3);
        for(int i =0; i<itemsList.size(); i++) {
            exService.submit(new GetDistance(i,usersCurrentLocation));
        }
        exService.shutdown();
    
    }
    

    我已经尝试过CachedThreadPoolFixedThreadPool-花费的时间几乎相同,我也赞成CachedThreadPool,因为建议将其用于小型操作,但我担心的是-假设CachedThreadPool创建10个线程(最坏的情况)以完成该过程(10项),如果我的应用程序在低端设备上运行会不会有问题?由于创建的线程数也会影响设备的RAM。

    想知道您对此的想法和意见。使用哪个更好?

    谢谢

    最佳答案

    newCachedThreadPool一起使用更适合这种情况,因为您的任务很小并且受I/O(网络)限制。这意味着您应该创建大于处理器核心数量的线程(通常是1.5倍〜2倍)来获得最佳输出,但是在这里我想newCachedThreadPool可以自我管理。因此,与newCachedThreadPool相比,newFixedThreadPool的开销较小,将对您的情况有所帮助。

    如果您有CPU密集型任务,那么newFixedThreadPool可能是一个更好的选择。

    更新



    如果您始终只需要10个地址,则不要紧,请使用newCachedThreadPool。但是,如果您认为地址数量可以增加,请使用newFixedThreadPool,其线程数量
    从Java文档:

    newFixedThreadPool



    newCachedThreadPool

    关于java - CachedThreadPool与FixedThreadPool,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35859609/

    10-08 23:31