我想知道在这种特定情况下使用CachedThreadPool
或FixedThreadPool
。
用户登录到应用程序时。将获得大约10个地址的地址列表。我需要执行以下操作:
因此,我创建了一个实现
GetDistance
的Runnable
类-在该类中,我首先调用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();
}
我已经尝试过
CachedThreadPool
和FixedThreadPool
-花费的时间几乎相同,我也赞成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/