问题标签 [executors]

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 投票
0 回答
153 浏览

java - 如何运行长时间运行的处理器异步并从同一线程使用它?

基本上,我们有一个名为 OfficeManger 的类,它充当连接到 openoffice 软件的驱动程序,它需要一直连接,以便我们可以使用转换器来转换文档。我们在 Web 应用程序启动期间启动 OpenOfficeProcess,它可以正常启动。但看起来在 init() 中运行的执行程序在不同的线程上,我们无法获取 OfficeManager 的运行实例。如何在自己的线程中运行,以便我可以从不同的类调用此实例以使用转换器方法?

开放式办公处理器

办公室主管

0 投票
6 回答
18578 浏览

java - 具有节流/吞吐量控制的 Java Executor

我正在寻找一个 Java Executor,它允许我指定限制/吞吐量/步调限制,例如,一秒钟内最多可以处理 100 个任务——如果提交了更多任务,它们应该排队并稍后执行。这样做的主要目的是避免在访问外部 API 或服务器时遇到限制。

我想知道是基本Java(我怀疑,因为我检查过)还是其他可靠的地方(例如Apache Commons)提供了这个,或者我是否必须自己编写。最好是轻量级的。我不介意自己写,但如果有一个“标准”版本,我至少想先看看它。

0 投票
1 回答
5782 浏览

unit-testing - 无法在单独的类中获取 Executor 的模拟实例

我正在尝试从 java.util.concurrent 包中模拟 ExecutorService 和 Executors 。

如果我尝试在我模拟对象的同一类(测试类)中获取对象,我能够获取模拟对象。但是,如果我尝试在不同的类(我要测试的类)中获取模拟对象,那么它会从 java.util.concurrent 返回实际对象。以下是代码片段。

我要测试的课程:

我的测试类看起来像:

如果 MyClassTest.testMyMethod() 如下所示,则返回模拟对象。

但是,如果我将测试方法更改为调用 myClass.myMethod(),它将返回实际实例而不是 myMethod() 中的模拟实例。

我期望在 myClass.myMethod 中获得一个模拟的 Executors/ExecutorService 实例。

这是预期的行为吗?谁能解释这种行为?我错过了什么吗?

0 投票
2 回答
8020 浏览

java - newSingleThreadExecutor 和使用 ThreadFactory 时的顺序

我试图了解一些关于newSingleThreadExecutor- 下面如何说它按顺序执行任务,当没有ThreadFactory提到时。

创建一个使用单个工作线程在无界队列上运行的 Executor。(但请注意,如果该单线程在关闭前的执行过程中因失败而终止,则如果需要执行后续任务,则新线程将取代它。)任务保证按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效newFixedThreadPool(1)的不同,返回的执行程序保证不能重新配置以使用额外的线程。

创建一个 Executor,它使用单个工作线程操作无界队列,并在需要时使用提供的 ThreadFactory 创建一个新线程。与其他等效newFixedThreadPool(1, threadFactory)的不同,返回的执行程序保证不能重新配置以使用额外的线程。

参数:

但是给出下面的示例,我使用的是 ThreadFactory :

似乎不再尊重顺序了。是因为线程具有相同的优先级,然后开始随机选择它们吗?使用工厂时发生的情况从 Java 帮助中不太清楚。

谢谢。


感谢您到现在为止得到的答案。这是更多代码和解释。我在高负载条件下(1000 个提交的线程)的日志中发现,首先提交的线程是在其他一些稍后提交的线程之后启动的。

该示例已简化,但 MyThread.run 方法中没有更多可以延迟日志记录的代码。

  • 1:00:01.100 DEB 新线程[id:500]
  • 1:02:01.160 DEB 新线程[id:900]
  • 1:03:01.200 WAR 启动线程 [thID:900]
  • 1:04:02.200 WAR 启动线程 [thID:500]
0 投票
3 回答
2123 浏览

python - chronos 中 docker 的自定义 mesos 执行器

我正在尝试将 Chronos 配置为使用https://github.com/mesosphere/mesos-docker/上的自定义 mesos-docker 执行程序。每次我尝试运行命令它都会失败。

我使用以下命令创建了任务

我还在执行程序中配置了日志记录,下面是我在失败时得到的日志

有什么我想念的吗。我是否需要在命令中提供 JSON。

0 投票
1 回答
169 浏览

java - 执行程序队列已满时如何暂时暂停调用任务

我有一系列接受数据的任务,然后在完成处理后将其移至不同的任务。

每个任务都有自己的 Executor Service 初始化为

任务处理文件,每个文件都放在taskA队列中,然后当由taskA处理时,它可能会放在taskB的队列中或直接放在taskC队列中。

这种管道方法的一个目标是,无论您拥有多少文件,应用程序都不会使用太多内存,因为任何时候都只会处理一些文件,但是每个任务都有不同的吞吐量级别,所以我发现任务 B 队列正在建立,因为任务 A 比任务 B 更快地处理文件。这些队列正在使用内存

所以我更改了 executor servide defn 以指定队列的 amx 大小,如下所示:

我的想法是,如果任务 A 尝试提交 101 项,那么它会一直等到有空间,所以任务 A 的处理会暂时休眠并且内存使用会减少。但相反,该任务只是被 RejectedExecutionException 拒绝。Ive 因为检查了所有可用的 ThreadExecutor 策略,并且没有一个只允许调用进程等待。

所以我认为我必须以错误的方式处理这个问题,我应该怎么做?

我目前正在使用 Java 7,并希望在发布时迁移到 Java 8。

0 投票
1 回答
3187 浏览

java - ExecutorService 和 SwingWorker

我已经到处寻找这个答案,但似乎找不到它,如果这是一个愚蠢的问题,我深表歉意。请温柔一点。

我正在编写一个简单的 MVC 框架,并且SwingWorker对它如何与ExecutorService.

我想限制 ExecutorService 允许我使用的线程数Executors.newFixedThreadPool(n)

我理解使用 SwingWorker 的重要性,因为它具有执行冗长任务(doInBackground...等)的方法,并允许通过事件调度线程更改 GUI。

但是,创建Executors.newFixedThreadPool(n)将线程数限制为nSwingWorker似乎有由某种私有内部常量设置的 10 个线程的限制MAX_WORKER_THREADS

我想知道我是不是在尝试将这两个类组合起来以限制线程数时出现错误的树,因为这意味着如果我向SwingWorkeran 提交任务,Executor那么该任务会产生多达 10 个线程吗?

我的最终目标是编写一个具有一些密集计算的程序,并且我不想从一开始就犯这样的基本错误,因为这可能会被证明是资源消耗问题,也就是说,我将有一个可爱的响应通过正确使用 EDT 的 GUI,但是如果每个任务都产生多达 10 个自己的线程,它将变得无响应!

0 投票
1 回答
63 浏览

java - 使用 Executors 时的 GC 调优

我有一个使用cachedThreadPool(的服务器端应用程序Executors.newCachedThreadPool。但是我可以看到由于频繁的 GC 可能会从 清理线程而导致性能下降cachedpool。有没有办法针对这种情况调整 GC?

0 投票
1 回答
3851 浏览

java - 为什么Java程序没有终止

下面的代码检查ExecutorCompletionServicefrom Java Concurrencyframework 的使用情况(正在使用的 IDE 是 Netbeans)。

但程序不会终止。为什么?

代码:

0 投票
1 回答
1423 浏览

android - Android java.util.concurrent.Executors newSingleThreadScheduledExecutor 示例

我在使用 Android java.util.concurrent.Executors 时遇到问题。

我正在尝试使用 newSingleThreadScheduledExecutor 每隔 x 秒运行一次我的可运行文件。但是我看到executor.scheduleAtFixedRate(myTask, 0, 50, TimeUnit.MILLISECONDS); 它在Android中不存在。

Android 文档链接,没有给出我应该如何使用 newSingleThreadScheduledExecutor 的线索;

有人可以给我一个例子,我应该如何使用它每 x 秒运行一次可运行文件?我知道你可以使用 Handler,但我想知道你如何使用 SingleThreadScheduledExecutor 来做同样的事情。

提前致谢。