问题标签 [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 投票
1 回答
577 浏览

java - ThreadPoolExecutor 中有界队列的清理

在阅读 Threadpool executor 的文档时,我看到如下:

当大量排队的任务被取消时,两个提供的方法 remove(java.lang.Runnable) 和 purge() 可用于协助存储回收。

我知道,如果取消任何任务,我可以使用这些方法来清理工作队列。我试图了解实际源中的哪个部分会自动进行清理。假设我从 10 个队列开始,其中 4 个任务被取消,当新任务到达时,队列大小是 6,还是会忽略 4 个取消的任务并重置为 10。

从来源我看到这个评论:

但是有人可以告诉我工作线程在哪里主动删除源中取消的任务吗?

感谢您的时间,

0 投票
3 回答
2740 浏览

java - 我们如何知道 threadPoolExecutor 已经执行完毕

我有一个向 MQ 发送消息的父线程,它为工作线程管理一个 ThreadPoolExecutor,该线程侦听 MQ 并将消息写入输出文件。我管理一个大小为 5 的线程池。所以当我运行我的程序时,我有 5 个带有消息的文件。直到这里一切正常。我现在需要在我的父线程中合并这 5 个文件。

我如何知道 ThreadPoolExecutor 已完成处理,以便我可以开始合并文件。

这是我的工人阶级

我如何知道 ThreadPool 何时完成处理,以便我可以进行其他清理工作?

谢谢

0 投票
4 回答
472 浏览

java - 辛格尔顿的其他成员

我的问题很笼统,所以我分成两部分,并尽量用我目前所知道的来具体说明。

第一部分

单例拥有自己的私有静态实例。关于单例的一些问题:
1. 它的成员也应该是静态的,还是取决于要求?
2. 如果 1. 的答案是肯定的,那么如果所有成员都属于该类,那么以私有实例变量开头的意义何在?
3. 是否需要私有实例,因为 JVM 需要一个可引用对象(单例)来保持其(JVM)生命周期的长度?

第二部分

需要在 tomcat 托管的 Web 应用程序中进行多个并发远程调用(该应用程序将 GWT 用于某些组件,因此如果一个好的解决方案需要,我可以使用 servlet 来满足上述要求)。目前,我为需要此类调用的每个单独的流程流创建了一个带有缓存线程池的执行程序服务,我将我的可调用对象(每个可调用对象包含一个端点配置)传递到该线程池中。对我来说,如果线程池由多个流共享,而不是生成它们自己的池,那将是有意义的。持有静态线程池的单例会是一个很好的解决方案吗?

0 投票
3 回答
130 浏览

java - 在不使用全局变量的情况下读取线程的当前状态

我有一个 ThreadPoolExecutor,它管理 2 个 Worker 线程(Callables)。我的 Worker 线程的工作是监听 MQ 并将内容写入文件并更新计数。我的要求是当所有线程读取的消息总数等于提交的消息总数时,我需要通过传递 STOP 消息来停止我的工作线程。如何在父线程仍在运行时从我的工作线程中获取计数。

我检查了 ThreadPoolExecutor 的 API,它只有 beforeExecute 和 afterExecute。afterExecute 对我不起作用,因为我的线程应该在到达 afterExecute 之前先停止。

任何建议表示赞赏。

谢谢

0 投票
3 回答
3250 浏览

java - 为什么我不能用 BlockingQueue 实例化 ThreadPoolExecutor; 为什么只有 BlockingQueue?

我的理解是 callable 是在 1.5 中添加的,并且 runnable 接口保持原样以防止世界结束。为什么我不能实例化 a - 为什么队列必须只取可运行?在内部,如果我要提交、invokeAll、invokeAny 可调用对象,这应该没问题吧?另外,会返回一个可调用的列表吗?ThreadPoolExecutor(core, max, tu, unit, new BlockingQueue<Callable>())shutDownNow()

0 投票
1 回答
5196 浏览

android - 在 threadpoolexecutor 中停止运行任务的最佳方法是什么?

我正在 Android 中实现 Java ThreadPoolExecutor。我需要停止并从我的池中删除正在运行的任务。

我已经通过使用 submit(Runnable) 和 Future.cancel() 方法实现了这一点。

提交任务的代码如下:

submit() 返回的 Future 被传递给下面的方法。取消任务的代码如下:

问题:任务实际上并未取消。请让我知道我错在哪里。任何帮助,将不胜感激。

0 投票
5 回答
9366 浏览

java - ThreadPoolExecutor 中的 allowCoreThreadTimeout() 有什么用?

我必须在我的 Android 组件之一中使用 Java ThreadPoolExecutor。我正在搜索allowCoreThreadTimeout() 的使用。

我已阅读相关的 Java 和 Android 文档。但是我没有得到该方法的任何有用的实现场景。有人可以帮帮我吗??

0 投票
3 回答
1666 浏览

java - 执行某些任务后为 ThreadPoolExecutor 设置自定义 RejectedExecutionHandler?

我在我的一个 Android 组件中使用 Java ThreadPoolExecutor。我的问题是:

在对 TPE 执行一些任务后使用 setRejectedExecutionHandler() 设置 RejectedExecutionHandler 是一个好习惯吗?

我的意思是这样做有什么副作用。这是一个好习惯吗?

已编辑

我需要在 Android 中创建一个可供其他项目使用的 ThreadPoolManagementLibrary 项目。现在,我需要在我的组件中公开 TPE 的公共方法。如果我让用户设置 RejectedExecutionHandler 那么会有问题吗?

0 投票
4 回答
632 浏览

java - ThreadPoolExecutor 的排队行为可定制为更喜欢创建新线程而不是排队?

ThreadPoolExecutor文档说

如果 corePoolSize 或更多线程正在运行,Executor 总是更喜欢排队请求而不是添加新线程。


如果运行的线程数多于 corePoolSize 但少于 maximumPoolSize,则仅当队列已满时才会创建新线程。

有没有办法让执行程序更喜欢创建新线程,直到达到最大值,即使有超过核心大小的线程,然后开始排队?如果队列达到最大大小,任务将被拒绝。如果在处理繁忙的突发后超时设置将启动并将线程删除到核心大小,那就太好了。我看到了喜欢排队以进行节流的原因;但是,这种定制还允许队列主要充当尚未运行的任务列表。

0 投票
0 回答
212 浏览

java - 管理服务器端点配置的 ConcurrentHashMap 的单例服务的设计决策

我有一个单例ServerConfigs,其中包含(url,端口,连接数,...)的static ConcurrentHashMap成员。ServerConfig

单例有两个 'getServer' 方法:
1)返回单个服务器配置
2)返回整个地图

单例还通过在每次调用 getServer 方法时迭代一个整数(ServerConfig 的成员)来跟踪每个服务器附加到它的连接数来管理这些配置。它还公开了一个 releaseFor(ServerConfig) (可以是 ID,不一定是 obj 本身)和 releaseAll() 方法来减少映射中的连接计数。

我有一个Worker接口,其抽象 impl通过向其提交 s(基于 getServer 方法构造)来利用 a ThreadPoolExecutor(包含在另一个单例类 [ ThreadPool] 中并在应用程序中共享)。CallableClient抽象的 Worker 将被许多表示各种工作类型的 impl 扩展。单个会话将有许多 Worker impls 实例将任务提交给ThreadPool持有ThreadPoolExecutor.

A)我对使用单例的指令很满意。
B) 是的,这种方法本质上是有缺陷的,因为使用此代码的单个应用程序实例只会获得与 ServerConfig 端点的实际连接数的短视,因为该应用程序的其他应用程序实例和其他应用程序正在访问它们。端点不是 JMX 友好的。

我需要一些帮助来确定是否:
1)这ConcurrentHashMap是正确的选择,ServerConfigs因为多个线程可能正在访问它以进行读取和写入
2)公开映射的方法是否应该同步?
3) 持有与此处表示的端点的连接数的 ServerConfig 成员是否应该是除 int 之外的另一种类型?它的 getter/setter 是否应该同步?
4)返回与地图分离的深层副本ServerConfig是否会更好,因为它们的管理无论如何都集中在 ServerConfigs 单例中?

此外,将有一个 ScheduledThreadPoolExecutor 用于每隔几分钟监视服务器以更新 ServerConfigs 映射 - 其他几个线程访问和更新映射。