问题标签 [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.
java - 检查 ThreadPoolExecutor 中的所有任务是否完成
如何检查提交的所有任务是否ThreadPoolExecutor
已完成?
可以从之前提交的任务中添加新任务,所以我不能调用shutdown
后面的awaitTermination
nor invokeAll
,因为它会忽略这些新任务。
android - 执行两个 Runnables Android
我想让两个 Runnables 为我的 Android 应用程序工作:
1) 用于更改 ImageView 的可运行 r1:
2) 用于更改 TextView 的可运行 r2:
当我只运行其中一个时,它工作正常,但是当我尝试运行它们时,它们都不起作用。
我怎样才能让它们同时工作?
谢谢!
更新:我尝试像这样使用 ThreadPoolExecutor:
它给了我这些错误:
java - 带有线程池的 Java NIO Http 客户端请求
线程池执行器使用未来任务的线程数。它至少分配一个线程,直到 run() 或 call() 返回。
所以,我对如何将线程池用于 JAVA NIO HTTP 请求感到困惑。
1) 哪个线程将运行事件循环
2)由于线程不会阻塞IO,它们将退出运行/调用方法。然后谁负责调用他们的处理程序。
我的问题是如何将基于 Java NIO 的 HTTP POST 客户端请求与线程池一起使用(因为我们需要发出大量的 HTTP 请求),或者使用 Java NIO,实际上不需要在多个线程上运行它们,因为线程永远不会休眠(它总是执行,因为没有什么可以阻塞)
android - IntentService 在 android 中挂起 UI
在 IntentService 中,我使用的是 ThreadPoolExecutor poolSize 8 和 maxPoolSize 10。无论何时启动 Service,都会影响 UI。在 runTask() 方法中,我将任务添加到线程池。
java - 预初始化工作线程池以重用连接对象(套接字)
我需要在 Java 中建立一个工人池,其中每个工人都有自己的连接套接字;当工作线程运行时,它使用套接字但保持打开以供以后重用。我们之所以决定采用这种方法,是因为与在 ad-hoc 基础上创建、连接和销毁套接字相关的开销需要太多开销,因此我们需要一种方法,通过该方法,工作池可以通过其套接字连接进行预初始化,准备好在保持套接字资源不受其他线程影响的同时继续工作(套接字不是线程安全的),所以我们需要这些方面的东西......
}
在应用程序启动时,我们希望初始化工作程序,并希望以某种方式初始化套接字连接......
当应用程序请求工作时,我们将任务发送到工作池以立即执行......
使用工作代码更新
基于 Gray 和 jontejj 的有用评论,我有以下代码工作......
套接字任务
执行服务
我喜欢这种方法有几个原因......
- 套接字是可用于正在运行的任务的本地对象(通过 ThreadLocal),从而消除了并发问题。
- 套接字创建一次并保持打开状态,在新任务排队时重用,从而消除了套接字对象创建/销毁的开销。
java - 在 ThreadPoolExecutor 中测试 PriorityBlockingQueue
我用 PriorityBlockingQueue 实现了我的 ThreadPoolExecutor,如下例所示: https ://stackoverflow.com/a/12722648/2206775
并写了一个测试:
但最后,我没有得到 1 2 3 4 5,我得到了这些数字的随机顺序。是考试有问题还是有其他问题?如果首先,如何正确测试它?
java - newFixedThreadPool.setCorePoolSize() 不使用线程,创建新的线程,这可能是开销
newFixedThreadPool.setCorePoolSize() 不使用线程,创建新的线程。
说明:我为大小 2 创建了一个 newFixedThreadPool,如果这个池的两个线程都忙,我使用 setCorePoolSize() 向这个池中添加两个线程。在这个过程中,它似乎没有重用线程,或者可能正在终止一些线程并创建新的线程,我将用代码来解释。
代码:(请参阅输出了解)
一旦线程 11 和 12 开始工作,在输出中可以看到,我将数字增加 2,因此线程 13 和 14 开始工作,但之后,我总是创建新线程而不是使用线程 11 和 12 并重用线程 13和 14。
输出:(已在调试模式下运行)
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: 部分
java - 我需要同步 ExecutorService.execute() 吗?
我创建了一个枚举单例,如下所示:
现在我正在使用这个池在特定情况下进行异步日志记录。调用代码如下:
MyRunnable 对象的 Run 方法很简单,如下所示:
现在我的查询是,如果我向具有多个线程的队列提交大量请求,我会面临任何并发问题吗? executor.execute(task) 是否已经同步或者我是否需要在同步方法中包装执行方法(在 Logging枚举),然后调用该方法,如下所示:
java - 使用 Executor 服务时的线程问题
我在下面的代码中遇到了线程问题。当线程执行可运行对象的 Run 方法时,它不会打印我期望的数据。
代码1——调用代码
在上面的代码中,我检查了 CPEMethodData.getLogDataMap() 返回的 logData 与我预期的不同。但是当可运行对象实际执行时,它使用相同的数据运行......
代码2——创建5个线程的线程池...
代码3--可运行代码
下面是 CPEmethoddata.getLogData
当我运行将两个可运行文件提交到队列的代码 1 时,我希望在 run 方法的 sysout 中看到不同的 logData 内容,但是当我调试它时,我发现两次执行中的数据都是相同的……似乎是第二个runnable 干扰了第一个..任何人都可以帮助我了解这里的问题是什么。我认为我正在传递 2 个不同的 CatalogLogger 实例并且不应该引起任何问题..也可以请任何人为此提出任何解决方案?