问题标签 [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.
recursion - 如何在递归方法中使用 Future 和 Callable?
我正在尝试使用 Future 和 Callable 将 dfs 递归方法转换为并行以提高效率。但不知道如何正确地做到这一点。这是代码:
我期望做的是递归方法将继续计算而不等待task.get()的返回值。因此,每当它进入深度 3 时,它都会提交一个未来任务,然后返回计算另一个子树,同时该任务将计算自己的子树。
但是,我发现这个方法仍然是顺序的,而不是并行的。(我每次调用方法时都打印出深度,结果和没有使用future和executor的方法一样,而且总是比较慢。)
我相信这不是使用 Future 和 Callable 的正确方法,我找到了一些示例,但它们没有使用递归方法。最常见的例子是有一个 Future List> 的列表,并且每次提交一个任务,然后在另一个循环中迭代 Future 列表。
有谁知道如何以递归方法实现 Future 和 Executor ?
java - 在Java中,当它可能向自己提交额外的任务时如何关闭executorservice
我有一个任务管道(管道中的每个任务都有不同的并行度要求),每个任务都在不同的 ExecutorService 中工作。任务处理数据包,因此如果我们有 10 个数据包,那么将提交 10 个任务service1
,每个数据包一个任务。一旦提交的任务service1
实际调用,它可能会提交一个新任务以进一步处理数据包到service2
或service3
不。
以下代码工作正常,即:
shutdown()
service1
在所有内容提交后调用service1
然后 awaitTermination() 不会返回,直到在 shutdown() 之前提交的所有任务都实际完成运行。--
/li>shutdown()
然后调用 onservice2
但是因为所有提交的任务service1
都已完成,并且所有任务都提交到service2
from tasks 上的service1
所有任务都已提交过service2
才shutdown()
调用 onservice2
。-- 以此类推service3
但是,我现在添加了一个案例,service2
可以将数据包分解为较小的数据包并提交额外的任务service2
,但代码现在失败了。问题是一旦所有任务完成后shutdown()
就会调用它,但现在我们想从正在运行的任务提交额外的任务service2
service1
service2
service2
我的问题:
shutdown()
是在所有提交的任务完成运行后重新运行,还是立即返回但不停止已经提交的任务运行?更新:在下面回答- 如何解决我的新问题?
java - 如何中断执行线程
中断执行者线程的正确方法是什么?我有这个:名称为Worker的线程类和方法:
主要课程:
我尝试打电话worker.interrupt();
,或者executorService.shutdownNow();
但我的线程继续并且 isInterrupted() 是错误的。
java - 与另一个任务并行运行一个任务
我有以下Foo
使用类的FooProcessor
类。所以我想做的是,在运行 cp1 实例进程方法时,我想并行运行cp2.process()
.
但是,我希望 cp1 按顺序运行,所以我希望它运行并完成,如果 cp2 没有完成或失败,那很好。如果它没有失败,我想加入结果。它没有返回此示例中的任何内容,但我想返回结果。
为此,应该使用TaskExecutor吗?还是线程?
我只希望 cp2 与 cp1 并行运行。或者如果我添加更多让我们说 cp3,我希望它也与 cp1 并行运行。
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线程。
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:
java - 将工作发送到需要初始化的工作人员池
我有一个问题似乎与Executor
s 和 Thread 池所做的很接近,但我似乎无法让它完全适合。基本上我有一些工人需要一些时间来初始化并且我想集中起来,一旦他们准备好我就用它们来工作。我需要在 Thread 中执行此操作:
虽然 Executor 只允许我这样做:
我需要编写自己的线程池吗?重写已经做得很好的东西感觉很可惜。或者我需要用它ThreadLocal
来持有我的工人,并从Runnable
'run() 方法内部管理他们?
android - OutputStreamWriter 不写
我创建了一个带有异步任务的文件。之后安排一个执行程序每秒一次将信息写入所述文件。一旦我触摸一个按钮,执行程序就会关闭并且文件关闭,但通常不会在文件中写入任何内容。
代码:
每当按下停止按钮时,之前查询的 SharedPreference 都会设置为 true。
java - Java Executors 和每个线程(不是每个工作单元)对象?
我有一项可以从线程池设计模式中受益的任务(许多小任务要并行执行)。我最初从头开始实现了一个简单的线程池,n 个 Runnables 都从同一个线程池中提取工作单元,ConcurrentLinkedQueue
直到队列为空,然后终止。然后我决定“嘿,让我们试试 Java 中的 Executor,因为它可能比我天真的设计的系统测试得更好,更可靠。” 问题:在我的实现中,每个线程一直持续到队列为空,使用一段时间(!queue.isEmpty())
,并获得了自己的非线程安全对象实例,我们称之为它SlowObject foo
,构造起来很耗时。尝试将所有Runnable
进入Executor
s 池的 s 传递给时间效率低的对象的实例失败,因为它不是线程安全的。SlowObject
因为每个Runnable
都是不可取的,因为它们的建造成本很高。
有没有办法说“我们正在使用多少个线程?让我们SlowObject
为每个线程创建一个,然后让 Runnables 检测我们正在使用的线程并查找要使用的正确对象?” 这听起来很脆弱且容易失败——不过,我不确定我应该看什么设计模式。
java - 虚假唤醒会影响 Future.get() 吗?
Future.get( timeout, unit ) 是否容易受到与 Javadoc 中 Object.wait() 和 Condition.await() 记录的相同类型的虚假唤醒的影响?
假设线程在超时之前没有结束,它是否可能不会等待 1000 毫秒?似乎它必须等待完全超时(并生成超时异常),否则结果会是什么?