问题标签 [futuretask]
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.
java - 如何有效地处理来自 Executor Service 的多个结果
我是 ExecutorService 的新手,但不确定我的处理方法。对于一个已知任务,我最多可以处理 100 个线程。我使用下面的一般格式,在其中创建 FutureTasks 列表,然后将它们提交给 ExecutorService。ExecutorService 返回并将这些挂起的结果添加到另一个列表中。然后我遍历这个列表,在每个待处理的结果上调用 get()。
我的问题是:在所有 100 个线程都完成之前,每个 get() 上的这个块不会依次阻塞吗?有一个更好的方法吗 ?
我是否正确假设 get() 返回 Callable 实现的 call() 方法的结果?我正在使用默认的 FutureTask 类,并且没有对其进行子类化。
java - 抛出 ExecutionException 但没有原因
我有一个期货任务,它通过套接字对服务器执行一些 I/O 操作。当我使用get()
任务的方法来检索结果时,我得到了ExecutionException
,但没有原因,即getCause()
返回null
。在什么情况下会发生这种情况?我的意思是,我得到了这个异常,因为任务抛出了一些异常,但是它怎么会丢失呢?
android - Android 的带有 MatrixCursor 的 listView 没有更新 - futureTask
我正在用 android 编写一个简单的 xmpp 客户端,但 update 有问题contactList
。我使用MatrixCursor
withSimpleCursorAdapter
来做到这一点。当 prog 更新列表时,它会启动 futureTask 的线程。数据没问题,但屏幕上的列表没有刷新,因为(我认为)这个 futureTask 的线程正在等待执行?
drawContactList
当任何联系人更改状态时,从一个侦听器调用该方法。例如,当我将调用复制到 main 时,它可以完美运行。
知道如何解决吗?
代码:
java - Future.cancel(boolean) 方法的实用程序
我只是在探索 java.util.concurrent 包。
我了解到“ Future ”类有一个方法boolean cancel(boolean mayInterruptIfRunning)
请附上我写的测试代码:
最初,我假设取消任务也会停止正在运行的线程的执行(不包括“OUCH”部分)。但我得到的输出如下:
在进一步阅读stackoverflow本身时,据说
- 'cancel' 方法只能停止 'unstarted' 作业(与方法的 api 描述相矛盾)
- cancel 方法只是中断正在运行的线程,然后该线程必须从 run() 方法返回
因此,我包括了 'OUCH' 部分 - 一个 while 循环检查中断;输出如下:
问题 :
如果应该编写类似于“OUCH”部分的内容来停止正在运行的线程,那么取消方法的实用程序/价值是什么。如果无法通过取消来停止线程,将 Callable 包装在 FutureTask 中有何帮助?我忽略的设计/概念/逻辑部分是什么?
java - 使用 FutureTask 和回调实现异步调用
所以现在,我正在尝试实现一个异步调用,它调用我的 BasicHttpClient 从互联网获取 Http 响应,当 Http 客户端完成其工作时,它调用 Callee 类的方法之一。
一般来说,我的实现是这样的。
代码已大大简化,main() 方法调用 Callee 类的 getResult() 方法。顺便说一句,所有异常都已处理,并使用回调发送回被调用者。
但是,Callee 类中的“onRequestFinished”似乎永远不会被调用。
请帮忙。
java - Java:记录 FutureTask 异常
我有一个应用程序,它定期提交要在专用线程中执行的任务。这些任务FutureTask<V>
和线程只不过是一个无限循环,当它们进入队列时执行作业,如果为空则进入睡眠状态。
有时我需要等待计算的结果,所以我调用 FutureTask 的 get() 方法,如果发生不好的事情也会抛出异常。但是在某些情况下,我不在乎结果是什么,如果有的话,但是我需要知道(log、printStackTrace() 或其他什么...)在任务执行期间是否出现某种故障。
有什么方法可以实现这一点而不必等待我不需要的 get() ?
提前致谢!
更新:如果没有其他人等待结果,在执行任务后在运行线程上调用 get() 似乎是捕获异常的唯一方法。
另一种解决方案是扩展 FutureTask 类以提供一种方法,该方法通过 java 反射公开 sync.exception 私有字段。
java - 同时读取 2 个文件,没有更多的性能
我试图同时读取文件并返回行数
这工作得很好,但我发现如果我读取文件 1 和文件 2 之后会更快......所以我没有得到 futureTash 的任何性能提升
为什么?
scala - 如何在 scala 中执行超时操作?
上下文:我想编写烫伤作业(hadoop)来抓取页面,并且我想在 url 提取上设置超时(在 URLConnection 上没有超时,我想要其他超时情况的通用解决方案),即地图功能。
我正在考虑在所有资源释放后一些超时后被杀死的期货,因为它是内存关键代码。不确定在 scala API 中使用什么。
java - Java FutureTask 完成检查
我检查了 Oracle Java API,它提供了一些关于FutureTask.isDone()的信息
但我需要检查任务是否已完成或因任何错误而终止。isDone() 方法即使完成/终止也会返回。但我需要知道它是否由于某些问题而完成或终止。
java - 同步问题:我希望主线程在另一个线程之前运行,但有时它不会
java.util.concurrency
受包的启发,我完成了自己的小型并发框架(仅用于学习目的) 。这是关于 Callable/Future 机制的。我下面的代码是完整的,可编译且非常容易理解。
我的问题是,有时我会遇到死锁,第一个线程(main thread
)等待来自另一个线程的信号。但是在主线程进入等待状态之前,其他线程已经通知了主线程,所以主线程无法唤醒。
FutureTask.get()
应该总是在之前 FutureTask.run()
运行,但有时 run() 方法(由 调用new thread
)在 get() 方法(由 调用)之前运行main thread
。我不知道如何防止这种情况发生。
这是我希望两个线程如何运行的伪代码。
我无法理解新线程如何比实际启动新线程的主线程更快地启动和运行。