问题标签 [executor]

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 投票
3 回答
252 浏览

java - 有没有一种简单的方法可以告诉 Java Executor 在给定时刻正在运行哪些任务?

我确信我可以一起破解一些东西,这将使我能够解决这个问题,但我希望有一个我只是想念的开箱即用的解决方案。我阅读了文档,但什么也没看到。

我的特定应用程序正在使用由 aThreadPoolExecutor支持的 a DelayQueue,尽管我不确定这是否重要。

谢谢!

0 投票
1 回答
2238 浏览

task - Guice:提供程序中的注入器

我知道通常注入器应该在所有应用程序中只使用一次(在启动时)。但我有以下用例。我为 Executor 注入任务实现,然后在该任务中我有依赖项(比如说FileHandler),每次都必须实例化。FileHandlerProvider我知道方法是注入每次请求时都会返回新实例的提供程序(比如说)。问题是FileHandler它自己有很多依赖项(比如说ParserOutputPrinter...)。现在那些也每次都需要新的实例(因为实现可能有一些状态,例如计数器,并且在下一个线程运行时重用相同的实例将是一个问题)。问题是在注入提供者之后,提供者的相同实例被重用,所以新FileHandler的总是用相同的ParserOuputPrinter. 解决方案可能是再次注入ParserProvider andOutputPrinterProvider而不是 Parser 和OuputPrinterin FileHandlerProvider,但这并不正确,它很快就会变得太复杂,因为有更多的依赖关系。我现在看到的唯一简单的解决方案可能是使用 Injector in FileHandlerProvider,这将返回新实例FileHandler(和依赖项的新实例)。或者在这种情况下可能还有另一种更优雅的解决方案?

0 投票
4 回答
7743 浏览

java - 如何确保对提交给 ThreadPoolExecutor 然后取消的 FutureTask 进行垃圾收集?

我正在向Callablea 提交对象ThreadPoolExecutor,它们似乎一直存在于内存中。

使用 Eclipse 的 MAT 工具查看堆转储,可以看到Callable对象被 aFutureTask$Sync可调用变量引用。这FutureTask$Sync是由 aFutureTask同步变量引用的。这FutureTask是由FutureTask$Syncthis$0变量引用的。

我已经阅读了有关此内容(herehere和 on SO)的信息,似乎FutureTask可调用对象包含在ThreadPoolExecutor的 submit() 中永远持有对可调用对象的引用。

我感到困惑的是如何确保FutureTask收集垃圾,以便它不会继续将可调用对象保存在内存中,并保存可调用对象可能保存在内存中的任何内容?

只是为了提供有关我的特定情况的更多详细信息,我正在尝试以ThreadPoolExecutor一种允许在需要时取消所有提交的任务的方式来实现。我尝试了在 SO 和其他地方找到的几种不同方法,例如完全关闭执行程序(使用shutdown()shutdownNow())并保留期货返回列表submit()并对所有它们调用取消,然后清除期货列表。理想情况下,我希望不必将其关闭,并cancel()在需要时将其清除。

所有这些方法似乎都没有什么不同。如果我向池提交一个可调用的,它很有可能最终会留下来。

我究竟做错了什么?

谢谢。

编辑:

根据要求,这里是 ThreadPoolExecutor 的构造函数。

经过进一步测试,我可以看到如果我让已经提交给 ThreadPoolExecutor 的任务完成,那么就没有泄漏。如果我尝试以任何方式取消它们,例如:

或者保存对未来的引用并稍后调用取消:

或者通过使用以下方法将它们从队列中删除:

或者

或循环保存对期货的引用并调用:

任何这些情况都会导致 FutureTask 如上所述停留。

因此,所有这一切的真正问题是如何正确取消或从 ThreadPoolExecutor 中删除项目,以便 FutureTask 被垃圾收集并且不会永远泄漏?

0 投票
2 回答
1706 浏览

java - 当 Callable 返回特定结果时停止 Executor

我想阻止 Executor 运行任何更多 Future 对象,即使它们已提交给 Executor。通过 Executor 让多个线程运行都可以正常工作,但是当 Callable 之一返回 Boolean TRUE 时,Executor 应该停止。当前正在运行的 Future 完成很好,但继续其余部分将是浪费时间。

其中 MathCalculation 实现了 Callable 接口,其 call() 方法返回一个布尔值。

在每次迭代时搜索calculationSet 不是一个选项,因为该集合会变得非常大,并且由于多线程情况,它显然无法工作。有没有办法做到这一点?

0 投票
2 回答
1145 浏览

java - 在tomcat中使用ThreadPool执行器服务来加速请求

我有一个 tomcat6 servlet 应用程序。我的一个请求(平均约 10 秒)可以通过使用多线程得到显着改善,因为它是一个仅限 CPU 的任务并且我有 >= 8 个内核。我只是想知道这样做是聪明还是只是表面上的改变:

当然,对于单一用户案例,这是一种改进。但是如果负载增加会发生什么?我有一个有限的 CPU 能力,目前在几个 HTTP 连接器线程之间共享。假设我已经对它们进行了最佳配置,我将不得不从 http 连接器线程池中获取一些线程并将其放入某个执行器服务器中,以加快这个单一(但重要的)操作。

我的假设是,随着负载的增加,如果我使用额外的线程执行器服务,我的系统性能会更差。

你看到我的问题了吗?有没有人有一些最佳实践的想法?还是我忽略了什么?

0 投票
1 回答
744 浏览

java - 轻量级、可折叠的 Executor 实现?

我正在为 Android 构建一个移动应用程序,我需要为我的每个 List 适配器汇集 HTTP 请求。我基本上想要一个ExecutorService“崩溃”的实现,即:它将使用多达n 个线程,但随着线程完成,它们将立即过期,使其非常轻量级。如果需求量很大,它只会将任务转储到等待线程可用的队列中。有没有办法在不写ExecutorService自己的情况下做到这一点,或者我应该把手弄脏然后去做?

0 投票
1 回答
1312 浏览

python - 是我自己还是 Windows 上新的 Python 期货模块出现了严重问题

我在 Windows XP 上,我遇到了新的 Python 3.2 期货模块的问题。看来我无法ProcessPoolExecutor上班了。会话示例:

对我来说,这里似乎有问题。

0 投票
3 回答
3466 浏览

java - java-Executor 框架

请看我下面的代码....

//添加

在这部分中,如果结果集(rs)有 100 个记录执行器创建 100 个线程.....我需要在 10 个线程中运行这个过程。我需要您的帮助来了解如何控制线程。如果任何线程已完成其任务,那么它应该处理结果集中的即时可用任务。是否可以使用执行器框架来实现。

谢谢...

维杰365

0 投票
2 回答
838 浏览

java - 我是否必须在应用程序退出时手动关闭执行程序?

假设我的Executor executor;应用程序中有一个地方。只是像往常一样说并让“系统”处理它就足够了setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);吗,还是我必须executor.shutdown();在应用程序退出之前注册一个侦听器并手动调用?

0 投票
4 回答
1128 浏览

java - 编写 Java 服务器来同时处理多个客户端

在构建同时处理多个客户端的 Java 服务器时,我需要一些建议。客户端需要在相当长的时间内保持连接。我目前正在使用阻塞 IO 并产生一个线程来从连接到服务器的每个客户端读取,但这显然是不可扩展的。

我找到了一些选项,包括使用具有固定大小线程池的 Selector 或 Executor。我对任何一个都不太熟悉,那么这里最好的解决方案是哪一个?谢谢!