java - 创建多个线程池(ExecutorService)可以吗?

标签 java android

我在代码中创建了多个 ExecutorService 实例,通常每个 UI 页面都有一个 ExecutorService 实例。每个 ExecutorService 实例都会执行一些 http get 请求线程。

private ExecutorService m_threadPool = Executors.newCachedThreadPool();

这样做可以吗?

我遇到的问题是,有时 http get 请求从 HttpURLConnection getResponseCode() 调用中得到响应代码 -1。不知道是不是线程池实例多导致的。

谢谢。

最佳答案

ExecutorService 本身 只是另一个对象,因此没有大的开销。 但是默认情况下,每个线程池都有一些空闲线程,这是造成资源浪费的主要原因。我建议将每个池中预生成线程的默认数量设置得较小(如果您不确定是否发送任何请求,则为 1 或 0)以减少创建额外对象的成本。线程将按需创建,您将能够保持代码整洁。

另一种解决方案是使用单个线程池,但为每个 UI 窗口维护一个单独的任务列表。在这种情况下,当窗口关闭时,您将不得不遍历所有任务并手动取消正在运行的任务(这也可以在单独的线程中完成)。任务可以用 Future<?> 表示(它有方便的 isDone()cancel() 方法)。

关于java - 创建多个线程池(ExecutorService)可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970821/

相关文章:

android - 我如何从 VideoView 类扩展我自己的类?请举个例子

Javafx SSL 客户端配置以使用我的 Spring boot ssl 安全 Rest Api

android - 这个应用程式可以在单一 Activity 中运作,但在加入应用程式抽屉时会当机

java - 如何使用java断言视频 Action ?

java - SQL查询显示在窗口上

android - 移动设备上的 Google Analytics 垃圾邮件 - 应用程序未发布

android - 有没有办法从传入的修饰符中检索值?

android - 如何在 Android 后台播放 YouTube 视频?

java - 使用 Junit 5 参数化对象列表

Java - 获取一个二维数组并使用一维数组返回该数组的行之和