问题标签 [threadpoolexecutor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2677 浏览

java - 检查 ThreadPoolExecutor 中的所有任务是否完成

如何检查提交的所有任务是否ThreadPoolExecutor已完成?

可以从之前提交的任务中添加新任务,所以我不能调用shutdown后面的awaitTerminationnor invokeAll,因为它会忽略这些新任务。

0 投票
1 回答
1865 浏览

android - 执行两个 Runnables Android

我想让两个 Runnables 为我的 Android 应用程序工作:

1) 用于更改 ImageView 的可运行 r1:

2) 用于更改 TextView 的可运行 r2:

当我只运行其中一个时,它工作正常,但是当我尝试运行它们时,它们都不起作用。

我怎样才能让它们同时工作?

谢谢!

更新:我尝试像这样使用 ThreadPoolExecutor:

它给了我这些错误:

0 投票
1 回答
2076 浏览

java - 带有线程池的 Java NIO Http 客户端请求

线程池执行器使用未来任务的线程数。它至少分配一个线程,直到 run() 或 call() 返回。

所以,我对如何将线程池用于 JAVA NIO HTTP 请求感到困惑。

1) 哪个线程将运行事件循环

2)由于线程不会阻塞IO,它们将退出运行/调用方法。然后谁负责调用他们的处理程序。

我的问题是如何将基于 Java NIO 的 HTTP POST 客户端请求与线程池一起使用(因为我们需要发出大量的 HTTP 请求),或者使用 Java NIO,实际上不需要在多个线程上运行它们,因为线程永远不会休眠(它总是执行,因为没有什么可以阻塞)

0 投票
1 回答
723 浏览

android - IntentService 在 android 中挂起 UI

在 IntentService 中,我使用的是 ThreadPoolExecutor poolSize 8 和 maxPoolSize 10。无论何时启动 Service,都会影响 UI。在 runTask() 方法中,我将任务添加到线程池。

0 投票
2 回答
8049 浏览

java - 预初始化工作线程池以重用连接对象(套接字)

我需要在 Java 中建立一个工人池,其中每个工人都有自己的连接套接字;当工作线程运行时,它使用套接字但保持打开以供以后重用。我们之所以决定采用这种方法,是因为与在 ad-hoc 基础上创建、连接和销毁套接字相关的开销需要太多开销,因此我们需要一种方法,通过该方法,工作池可以通过其套接字连接进行预初始化,准备好在保持套接字资源不受其他线程影响的同时继续工作(套接字不是线程安全的),所以我们需要这些方面的东西......

}

在应用程序启动时,我们希望初始化工作程序,并希望以某种方式初始化套接字连接......

当应用程序请求工作时,我们将任务发送到工作池以立即执行......


使用工作代码更新
基于 Gray 和 jontejj 的有用评论,我有以下代码工作......

套接字任务

执行服务

我喜欢这种方法有几个原因......

  • 套接字是可用于正在运行的任务的本地对象(通过 ThreadLocal),从而消除了并发问题。
  • 套接字创建一次并保持打开状态,在新任务排队时重用,从而消除了套接字对象创建/销毁的开销。
0 投票
2 回答
4484 浏览

java - 在 ThreadPoolExecutor 中测试 PriorityBlockingQueue

我用 PriorityBlockingQueue 实现了我的 ThreadPoolExecutor,如下例所示: https ://stackoverflow.com/a/12722648/2206775

并写了一个测试:

但最后,我没有得到 1 2 3 4 5,我得到了这些数字的随机顺序。是考试有问题还是有其他问题?如果首先,如何正确测试它?

0 投票
3 回答
2801 浏览

java - newFixedThreadPool.setCorePoolSize() 不使用线程,创建新的线程,这可能是开销

newFixedThreadPool.setCorePoolSize() 不使用线程,创建新的线程。

说明:我为大小 2 创建了一个 newFixedThreadPool,如果这个池的两个线程都忙,我使用 setCorePoolSize() 向这个池中添加两个线程。在这个过程中,它似乎没有重用线程,或者可能正在终止一些线程并创建新的线程,我将用代码来解释。

代码:(请参阅输出了解)


一旦线程 11 和 12 开始工作,在输出中可以看到,我将数字增加 2,因此线程 13 和 14 开始工作,但之后,我总是创建新线程而不是使用线程 11 和 12 并重用线程 13和 14。

输出:(已在调试模式下运行)


0 投票
0 回答
1515 浏览

android - RejectedExecutionException 128 活动线程 AsyncTaskLoader

我已经使用 AsyncTaskLoader 搜索了 RejectedExecutionException 的解决方案,但没有一个有效。它们中的大多数用于 AsyncTask,例如https://github.com/commonsguy/cwac-task/blob/master/src/com/commonsware/cwac/task/AsyncTaskEx.java但 AsyncTaskLoader 有点不同。

我尝试的第一件事是在 onCreateLoader() 返回 CursorLoader 之前执行此操作。

真正要做的就是在 100 之后停止加载程序,这不是我想要的。我试着玩弄不同的值,但这似乎是在浪费时间,因为它没有解决问题。

然后我发现了这个:Submitting tasks to a thread-pool give RejectedExecutionException但我不确定这个答案如何解决这个问题或如何将它与 asynctaskloader 一起使用。

我还尝试创建一个 ThreadPoolExecutor 对象来更改池大小,但我不确定如何同时使用它和 asynctaskLoader。我什至不确定它是否会改变任何东西。

我也尝试过 Thread.sleep() 但这仅适用于我发现的 UI 线程,并且对我认为的后台线程没有任何作用。

我可以针对我正在执行的这种特定情况重新设计应用程序,但加载程序计数只会下降到 26 或 28。我听说某些 Android 版本的最大值为 10,所以我很担心. 希望我不必仅仅在 UI 线程中进行查询,因为我认为它们已经运行得相当快了。只是我显然不能使用 CursorLoader 执行超过 128 个查询。我该如何解决这个问题?我应该怎么办?

这是日志的 Caused by: 部分

0 投票
1 回答
4655 浏览

java - 我需要同步 ExecutorService.execute() 吗?

我创建了一个枚举单例,如下所示:

现在我正在使用这个池在特定情况下进行异步日志记录。调用代码如下:

MyRunnable 对象的 Run 方法很简单,如下所示:

现在我的查询是,如果我向具有多个线程的队列提交大量请求,我会面临任何并发问题吗? executor.execute(task) 是否已经同步或者我是否需要在同步方法中包装执行方法(在 Logging枚举),然后调用该方法,如下所示:

0 投票
1 回答
531 浏览

java - 使用 Executor 服务时的线程问题

我在下面的代码中遇到了线程问题。当线程执行可运行对象的 Run 方法时,它不会打印我期望的数据。

代码1——调用代码

在上面的代码中,我检查了 CPEMethodData.getLogDataMap() 返回的 logData 与我预期的不同。但是当可运行对象实际执行时,它使用相同的数据运行......

代码2——创建5个线程的线程池...

代码3--可运行代码

下面是 CPEmethoddata.getLogData

当我运行将两个可运行文件提交到队列的代码 1 时,我希望在 run 方法的 sysout 中看到不同的 logData 内容,但是当我调试它时,我发现两次执行中的数据都是相同的……似乎是第二个runnable 干扰了第一个..任何人都可以帮助我了解这里的问题是什么。我认为我正在传递 2 个不同的 CatalogLogger 实例并且不应该引起任何问题..也可以请任何人为此提出任何解决方案?