- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想知道在这个特定场景中使用哪个 CachedThreadPool
或 FixedThreadPool
。当用户登录到应用程序时,将获得大约 10 个地址的地址列表。我需要执行以下操作:
因此,我创建了一个类 GetDistance
,它实现了 Runnable
。在本类(class)中,我首先调用 Google API 并解析响应以获取相应的纬度和经度,然后调用和解析另一个 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
会自行管理。因此,与 newFixedThreadPool
相比,newCachedThreadPool
的开销会更少,并且对您的情况有所帮助。
如果您有 CPU 密集型任务,那么 newFixedThreadPool
可能是更好的选择。
更新
A list of addresses will be obtained about 10 addresses.
如果您始终只需要 10 个地址,那么没关系,请使用 newCachedThreadPool
。但是,如果您认为地址数量可以增加,则使用 newFixedThreadPool
,线程数量 <= 可用内核数量的 1.5 倍到 2 倍。
来自 Java 文档:
Creates a thread pool that reuses a fixed number of threads operating off a shared unbounded queue. At any point, at most nThreads threads will be active processing tasks. If additional tasks are submitted when all threads are active, they will wait in the queue until a thread is available. If any thread terminates due to a failure during execution prior to shutdown, a new one will take its place if needed to execute subsequent tasks. The threads in the pool will exist until it is explicitly shutdown.
Creates a thread pool that creates new threads as needed, but will reuse previously constructed threads when they are available. These pools will typically improve the performance of programs that execute many short-lived asynchronous tasks. Calls to execute will reuse previously constructed threads if available. If no existing thread is available, a new thread will be created and added to the pool. Threads that have not been used for sixty seconds are terminated and removed from the cache. Thus, a pool that remains idle for long enough will not consume any resources. Note that pools with similar properties but different details (for example, timeout parameters) may be created using ThreadPoolExecutor constructors.
关于java - CachedThreadPool 与 FixedThreadPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35859609/
我需要做一些多线程工作,我使用 ExecutorService.newCachedThreadPool() 并提交一些从队列中检索到的作业。 public class ContentParser {
我正在玩线程,但我不明白为什么这没有像我想象的那样工作。 我正在尝试使用线程计算总和,并期望线程池在打印结果时等待所有任务完成(由于 shutdown() 调用和 isTermination() 检查
我对我的应用程序进行了负载测试,以找出支持计划负载所需的最大线程数。 我使用了 ExecutorService CachedThreadPool 以便根据负载动态创建线程。现在我使用 getLarge
我想知道在这个特定场景中使用哪个 CachedThreadPool 或 FixedThreadPool。当用户登录到应用程序时,将获得大约 10 个地址的地址列表。我需要执行以下操作: 将地址转换为我
下面的线程每 12-24 小时运行一次,我不希望池中有空闲线程。当前代码是: private final ScheduledExecutorService scheduler = Executors.
想象一个需要时间的软件,它接收一堆文本文件(每个 100+ MB),处理它们并放入数据库。我试图通过利用更多核心(这台机器恰好是 8 个,带有超线程的四核 i7)来对其进行一些优化。 考虑以下代码:
我们正在使用通过 ExecutorService#newCachedThreadPool 创建的 CachedThreadPool。 (Java 1.6)。我们在代码的其他地方遇到错误:“无法创建新的
我目前有执行以下操作的代码: private final static ExecutorService pool = Executors.newCachedThreadPool(); public v
我在 CodeReview 中问过这个问题,但它已关闭。 对于一项学校作业,我必须创建 54 个从 Executors.newCachedThreadPool() 同时运行的线程。写入 JTextAr
我有一个服务器,它不断监听客户端连接,并在每次客户端连接时创建一个新线程来处理该客户端的 I/O。现在,我有多个实现 Runnable 的类,并且在 run 方法中有一个 while 循环,该循环一直
这是缓存的线程池: new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue()
我有许多任务,对于大多数任务,我想以不同的速率定期执行。不过,有些任务可能会安排同时执行。此外,一个任务可能需要在另一个任务当前正在执行时开始执行。 我还想通过为每个任务设置一个对象来自定义每个任务,
这个问题在这里已经有了答案: Implementation of BlockingQueue: What are the differences between SynchronousQueue a
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭 8 年前。 Improve
我有一个程序可以生成线程 (~5-150) 来执行一堆任务。最初,我使用 FixedThreadPool 因为 this similar question建议它们更适合生命周期更长的任务,并且由于我对
我是一名优秀的程序员,十分优秀!