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

recursion - 如何在递归方法中使用 Future 和 Callable?

我正在尝试使用 Future 和 Callable 将 dfs 递归方法转换为并行以提高效率。但不知道如何正确地做到这一点。这是代码:

我期望做的是递归方法将继续计算而不等待task.get()的返回值。因此,每当它进入深度 3 时,它都会提交一个未来任务,然后返回计算另一个子树,同时该任务将计算自己的子树。

但是,我发现这个方法仍然是顺序的,而不是并行的。(我每次调用方法时都打印出深度,结果和没有使用future和executor的方法一样,而且总是比较慢。)

我相信这不是使用 Future 和 Callable 的正确方法,我找到了一些示例,但它们没有使用递归方法。最常见的例子是有一个 Future List> 的列表,并且每次提交一个任务,然后在另一个循环中迭代 Future 列表。

有谁知道如何以递归方法实现 Future 和 Executor ?

0 投票
5 回答
4572 浏览

java - 在Java中,当它可能向自己提交额外的任务时如何关闭executorservice

我有一个任务管道(管道中的每个任务都有不同的并行度要求),每个任务都在不同的 ExecutorService 中工作。任务处理数据包,因此如果我们有 10 个数据包,那么将提交 10 个任务service1,每个数据包一个任务。一旦提交的任务service1实际调用,它可能会提交一个新任务以进一步处理数据包到service2service3不。

以下代码工作正常,即:

  • shutdown()service1在所有内容提交后调用service1
  • 然后 awaitTermination() 不会返回,直到在 shutdown() 之前提交的所有任务都实际完成运行。--shutdown()然后调用 onservice2但是因为所有提交的任务service1都已完成,并且所有任务都提交到service2from tasks 上的service1所有任务都已提交过service2shutdown()调用 on service2。-- 以此类推service3

    /li>

但是,我现在添加了一个案例,service2可以将数据包分解为较小的数据包并提交额外的任务service2,但代码现在失败了。问题是一旦所有任务完成后shutdown()就会调用它,但现在我们想从正在运行的任务提交额外的任务service2service1service2service2

我的问题:

  1. shutdown()是在所有提交的任务完成运行后重新运行,还是立即返回但不停止已经提交的任务运行?更新:在下面回答
  2. 如何解决我的新问题?
0 投票
1 回答
967 浏览

java - 如何中断执行线程

中断执行者线程的正确方法是什么?我有这个:名称为Worker的线程类和方法:

主要课程:

我尝试打电话worker.interrupt();,或者executorService.shutdownNow();但我的线程继续并且 isInterrupted() 是错误的。

0 投票
5 回答
6387 浏览

java - 与另一个任务并行运行一个任务

我有以下Foo使用类的FooProcessor类。所以我想做的是,在运行 cp1 实例进程方法时,我想并行运行cp2.process().

但是,我希望 cp1 按顺序运行,所以我希望它运行并完成,如果 cp2 没有完成或失败,那很好。如果它没有失败,我想加入结果。它没有返回此示例中的任何内容,但我想返回结果。

为此,应该使用TaskExecutor吗?还是线程?

我只希望 cp2 与 cp1 并行运行。或者如果我添加更多让我们说 cp3,我希望它也与 cp1 并行运行。

0 投票
0 回答
818 浏览

java - 在运行后台任务之前,我可以取消一个 swingworker 并等待它完成吗

在运行后台任务之前,我可以取消Swingworker并等待它完成吗?或者,我可以向运行代码的任务发送中断doInBackground()而不取消整个摇摆工人。?

我的问题是我不希望在代码完成done()之前启动代码doInBackground()。早期的代码从未调用过取消,Swingworker而是我只是设置了一个可变布尔值,WidgetController它将检查并且如果设置为正常关闭。这一切都很好,除了WidgetController有时需要很长时间来检查这个标志,所以我需要能够使用中断方法。

伪示例

当用户单击启动时会显示一个对话框,此调用WidgetDialogListener此创建实例WidgetWorker,此启动WidgetController,显示一个WidgetProgressDialog并在显示正常完成时WidgetController显示所做操作ShowWidgetReport的摘要WidgetController

运行WidgetController时,WidgetProgressDialog会显示进度。如果用户单击取消按钮以停止进度,这会导致发送中断,WidgetController然后无需等待widgetcontroller实际完成 ,就会调用 done 方法导致ShowWidgetReport显示。但我不希望它在WidgetController实际完成之前这样做。

编辑

我使用了Waiting for a cancelled future 中的AwaitingWorker描述来真正完成Jacob 指给我的

也许完全误解了解决方案,但似乎无论您采用哪种方式,gui 线程最终都会等待非 gui 任务完成,而我想要的是在完成任何操作之前完成非 gui 任务gui线程。

0 投票
1 回答
199 浏览

java - Shutdown executor without executorService in Java

Is there a way to shutdown an Executor in Java without first casting it to ExecutorService? Basically i have a class called Exx that implements Executor. I want to shutdown Exx. How would I do that? Essentially, I need to know how to shutdown an Executor.

EDIT: Example:

0 投票
1 回答
811 浏览

java - 将工作发送到需要初始化的工作人员池

我有一个问题似乎与Executors 和 Thread 池所做的很接近,但我似乎无法让它完全适合。基本上我有一些工人需要一些时间来初始化并且我想集中起来,一旦他们准备好我就用它们来工作。我需要在 Thread 中执行此操作:

虽然 Executor 只允许我这样做:

我需要编写自己的线程池吗?重写已经做得很好的东西感觉很可惜。或者我需要用它ThreadLocal来持有我的工人,并从Runnable'run() 方法内部管理他们?

0 投票
1 回答
1023 浏览

android - OutputStreamWriter 不写

我创建了一个带有异步任务的文件。之后安排一个执行程序每秒一次将信息写入所述文件。一旦我触摸一个按钮,执行程序就会关闭并且文件关闭,但通常不会在文件中写入任何内容。

代码:

每当按下停止按钮时,之前查询的 SharedPreference 都会设置为 true。

0 投票
2 回答
1576 浏览

java - Java Executors 和每个线程(不是每个工作单元)对象?

我有一项可以从线程池设计模式中受益的任务(许多小任务要并行执行)。我最初从头开始实现了一个简单的线程池,n 个 Runnables 都从同一个线程池中提取工作单元,ConcurrentLinkedQueue直到队列为空,然后终止。然后我决定“嘿,让我们试试 Java 中的 Executor,因为它可能比我天真的设计的系统测试得更好,更可靠。” 问题:在我的实现中,每个线程一直持续到队列为空,使用一段时间(!queue.isEmpty()),并获得了自己的非线程安全对象实例,我们称之为它SlowObject foo,构造起来很耗时。尝试将所有Runnable进入Executors 池的 s 传递给时间效率低的对象的实例失败,因为它不是线程安全的。SlowObject因为每个Runnable都是不可取的,因为它们的建造成本很高。

有没有办法说“我们正在使用多少个线程?让我们SlowObject为每个线程创建一个,然后让 Runnables 检测我们正在使用的线程并查找要使用的正确对象?” 这听起来很脆弱且容易失败——不过,我不确定我应该看什么设计模式。

0 投票
1 回答
234 浏览

java - 虚假唤醒会影响 Future.get() 吗?

Future.get( timeout, unit ) 是否容易受到与 Javadoc 中 Object.wait() 和 Condition.await() 记录的相同类型的虚假唤醒的影响?

假设线程在超时之前没有结束,它是否可能不会等待 1000 毫秒?似乎它必须等待完全超时(并生成超时异常),否则结果会是什么?