问题标签 [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.
servlets - Java HTTPServlet 与独立应用程序 + 一些 OutOfMemory 乐趣
我有一个使用 Java 5 从文件系统加载多个序列化对象的函数FutureTask
。我的电脑内存应该不是问题。
如果我在 main 方法中调用该函数,一切正常,但如果我从init()
a 或 astatic block
中调用该函数,HTTPServlet
我会得到各种OutOfMemoryException
(通常是 Java 堆空间)......
有谁知道为什么通过使用 Servlet 我最终会遇到这个问题?FutureTasks 和 Servlet 可以以任何方式发生冲突吗?我可以做些什么来理解/解决这个问题?
java - FutureTask,不安全的动作
我在编译代码时收到此警告(使用 -Xlint 选项):
生成警告的行:
Return 类实现了 Callable:
如何修复警告?
java - FutureTask 和 Callable 用法
我有一个要实现的功能,我正在考虑使用 FutureTask 和可调用的 calsses。只是想验证我是否可以使用它,以及在这种情况下使用这些类是否正确。这里是:我正在使用 struts spring hibernate 开发一个 Web 应用程序。我必须上传一个包含大约 40 列/字段和大约 1000 行的 excel/.csv/.txt 类型的文件。我必须处理该行的每一行和每个字段。这将包括以下子任务:
- 从单元格/字段中获取数据
- 验证数据,例如 maxlenght ,required 等。
- 如果该行不符合特定条件,则丢弃该行。
- 为每一行创建一个 VO 并用数据填充一个 VO
- 存储VO。
因此,我正在考虑为每个行处理使用未来的任务以使其成为多线程。我面临的问题是如何等待所有任务完成,因为我想发送带有最终结果的响应。只是我想让处理更快而不是实际响应时间。
java - 提交给 Executor 的 FutureTask 没有运行
我写了一个类,它的一系列实例打算从 AsyncTask 中调用,它会从方法 runReport() 返回一个结果。它创建了一个工作线程就好了,但由于某种原因它不执行 Callable 的 call() 方法。我究竟做错了什么?
据我所知,我必须在自己的线程中作为 FutureTask 执行此操作,因为它需要执行以下操作(除了返回之外,所有这些都在 doStuff() 内部):
- 进行一些同步设置(AsyncTask 将其保持在 UI 线程之外)
- 调用 Looper.prepare()
- 注册一个监听器
- 调用 Looper.loop(),在一段时间内捕获来自监听器的一些回调。
- 当我有足够的数据点时,在侦听器回调中调用 Looper.myLooper().quit()
- 返回结果
我愿意接受更好的方法来做到这一点。我最初让 AsyncTask 进行此调用,然后在其线程上运行 Looper.loop(),但我无法处理这些对象的队列,因为我需要在返回结果之前从侦听器调用 Looper.myLooper.quit() ,这会不可逆地毒化线程的消息队列。
javascript - 在未来几天或几个月内执行操作
我正在尝试找出将来执行任务的最佳方式,例如向用户发送电子邮件。
我的想法是在需要发送电子邮件时存储(与用户数据一起存储在数据库中),并每天检查用户需要发送哪些电子邮件,并使用 Meteor 的 Timer 功能。
我看到的问题是设置了太多的计时器,并阻碍了性能。什么是好的解决方案?
编辑:基本上我的用例包括用户创建一个事件,他们将其设置为长期事件或短期事件(基于天、周或月),并且他们会根据持续时间收到对该事件的跟进。
我想我可以每小时检查一次,但这似乎是一个同等成本的问题。有没有流星特定的方法来做到这一点?或者只是一个更好的概念?
Edit2:好的,我意识到准确性对我的问题并不重要,所以我正在考虑为每个时区设置一个计时器,它会发送大量电子邮件。如果用户有一个长期事件并且他们的提醒是在本周,那么现在就发送它。基本上它取决于事件的持续时间和用户的时区。
所以我更新的问题是,我如何每天运行一些东西,记住我的问题?
java - Future.get(timeout) 的底层线程行为
我们正在使用Future
超时来完成任务。TimeOutException
当时间限制超过时,我们得到一个。从 的行为thread dump
,我意识到底层线程仍在继续。
是这样吗?它如何处理漫游的多个线程?如果IOException
从池中删除的线程抛出 no 怎么办?
如果这是真的,那么kill
底层线程的方法是什么。IO
在我的情况下,它一直在等待外部。
线程转储的一部分:
一旦 TimeOutException 发生(对于循环中的任何任务),我们将取消这些任务,如下所示:
不应该解决问题吗?
请指教。
提前致谢。
listener - 在所有 `FutureTask` 完成计算后,我如何调用另一个方法?
我有以下方法可以在不同的 PaaS 中创建和部署应用程序:
FutureTask
一旦所有人都完成了计算,我该如何调用另一个方法?我已经阅读了关于Command
模式和关于Listener
但我不确定这些是否是正确的,也不确定在这种情况下如何实现它们。
java - 设计问题:这仅适用于生产者/消费者吗?
我正在尝试提高索引我的 lucene 文件的性能。为此,我创建了一个工作人员“LuceneWorker”来完成这项工作。
鉴于下面的代码,“并发”执行变得非常缓慢。我想我知道为什么 - 这是因为期货增长到一个极限,几乎没有内存来执行 LuceneWorker 的另一项任务。
问:有没有办法限制进入执行程序的“工人”数量?换句话说,如果有“n”个期货 - 不要继续并允许首先对文档进行索引?
我的直观方法是我应该使用 ArrayBlockingQueue 构建消费者/生产者。但是在我重新设计它之前想知道我是否正确。
java - 如何正确扩展 FutureTask
在编写计算量大的应用程序时,我尝试使用 SwingWorker 类将负载分散到多个 CPU 内核。然而,这个类的行为被证明有些奇怪:似乎只使用了一个核心。
在搜索互联网时,我在这个网络上找到了一个很好的答案(参见Swingworker instances not running concurrently,user268396 的回答)——除了问题的原因——还提到了一个可能的解决方案:
为了解决这个问题,你可以做的是使用 ExecutorService 并在其上发布 FutureTasks。这些将提供 99% 的 SwingWorker API(SwingWorker 是 FutureTask 的衍生产品),您所要做的就是正确设置您的 Executor。
作为一名 Java 初学者,我不完全确定如何正确执行此操作。我不仅需要将一些初始数据传递给 FutureTask 对象,还需要像使用 SwingWorker 一样返回结果。因此,任何示例代码都将不胜感激。
nvx
==================== 编辑====================
在实现了FutureTask 中提到的实现 Callable的简单而优雅的解决方案之后,又出现了另一个问题。如果我使用 anExecutorService
创建单个线程,如何在线程完成运行后执行特定代码?
我试图覆盖FutureTask
对象的 done()(参见下面的代码),但我猜想“显示结果”位(或任何与 GUI 相关的东西)应该在应用程序的事件调度线程 (EDT) 中完成。因此:如何将 runnable 提交给 EDT?
java - 将 FutureTask 用于异步过程的问题
在我的 Java Web 应用程序中,我有一个方法可以结束大约 200 封电子邮件。由于电子邮件服务器延迟,整个过程大约需要 7 分钟。这种批量电子邮件发送必须是用户操作的结果。我当然不希望用户在被转发到下一个之前必须等待那么长时间,更不用说 Apache 无论如何都会超时,所以我正在尝试实现 FutureTask 以使进程在继续时在单独的线程中运行其余代码如下:
但是,该应用程序仍会等待 FutureTask 完成,然后再继续。我对这样的想法持开放态度,即这也不是在另一个线程中运行一些代码同时继续执行脚本的其余部分的最佳方式。有没有更好的方法/我如何使这个工作?