问题标签 [future]
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.
computer-science - 什么是期货?
什么是期货?这与惰性评估有关。
java - Future.get() 和 InterruptedException 异步线程
我在带有 httpClient 的应用程序中使用异步线程。我像这样使用 Future Api 拨打电话
此调用尝试检索从我的 Callable httpClient call() 方法返回的 html 字符串。
然而,我想要做的是确保 get 方法在执行 call() 方法时不会等待太久。我应该在调用 rssFuture.get() 时传递一个超时参数,还是只用一个 InterruptedException 捕获块包围就可以了?
还有一个异步线程在抛出 InterruptedException 之前等待的默认时间,如果是,我可以设置自定义值吗?
java - 您可以将 Future/Futuretask 对象与 Spring TaskExecutors 一起使用吗?
是否可以将 Java FutureTask与 Spring TaskExecutor 一起使用来获取Future对象?
我正在寻找一个实现Java ExecutorService接口的TaskExecutor,特别是submit() 方法。查看Spring Javadocs并没有发现任何这样的类。是否有一些我不知道的通过 Spring TaskExecutors 处理期货的替代方法?
如果可能的话,您能否举个例子?
multithreading - Clojure 可变存储类型
我正在尝试从网站上提供的 API 和文档中学习 Clojure。我对 Clojure 中的可变存储有点不清楚,我想确保我的理解是正确的。如果有任何想法我错了,请告诉我。
编辑:当我收到关于其正确性的评论时,我正在更新它。
免责声明:所有这些信息都是非正式的并且可能是错误的。不要使用这篇文章来了解 Clojure 的工作原理。
Vars总是包含一个根绑定,并且可能包含一个每个线程的绑定。它们与命令式语言中的常规变量相当,不适合在线程之间共享信息。(感谢亚瑟乌尔费尔特)
Refs是在支持原子事务的线程之间共享的位置,这些原子事务可以更改单个事务中任意数量的 refs 的状态。在退出同步表达式(dosync)时提交事务,并使用 STM 魔法(回滚、队列、等待等)自动解决冲突
代理是通过调度独立的动作函数来改变代理的状态,使信息能够以最小的开销在线程之间异步共享的位置。代理会立即返回,因此是非阻塞的,尽管在分派函数完成之前不会设置代理的值。
原子是可以在线程之间同步共享的位置。它们支持不同线程之间的安全操作。
这是我基于何时使用这些结构的友好总结:
- Vars 就像命令式语言中的常规旧变量。(尽可能避免)
- Atom 类似于 Vars,但具有线程共享安全性,允许立即读取和安全设置。(感谢马丁)
- 代理就像一个原子,但它不会阻塞它会产生一个新线程来计算它的值,只有在更改值的过程中才会阻塞,并且可以让其他线程知道它已完成分配。
- Refs 是在事务中锁定自己的共享位置。我们不需要让程序员决定在每段锁定代码的竞争条件下会发生什么,我们只需启动一个事务并让 Clojure 处理该事务中 ref 之间的所有锁定条件。
另外,一个相关的概念是函数future
。对我来说,future 对象似乎可以被描述为一个同步代理,其中在计算完成之前根本无法访问该值。它也可以被描述为一个非阻塞的 Atom。这些是对未来的准确概念吗?
java - 未来取消后如何在 Callable 中终止 CXF webservice 调用
编辑
到目前为止,这个问题已经经历了几次迭代,因此请随时查看修订版以查看有关历史和尝试的事情的一些背景信息。
我将 CompletionService 与 ExecutorService 和 Callable 一起使用,通过 CXF 生成的代码同时调用几个不同 Web 服务上的多个函数。这些服务都为我正在使用的一组信息提供不同的信息我的项目。但是,服务可能会在不引发异常的情况下长时间无法响应,从而延长对组合信息集的等待。
为了解决这个问题,我同时运行所有服务调用,几分钟后想终止任何尚未完成的调用,最好从可调用对象中或通过抛出来记录哪些调用尚未完成一个详细的例外。
这是一些高度简化的代码来说明我已经在做什么:
同时启动 WS 调用的代码:
我在这段代码中遇到的问题是,在等待 port.getXXXFeatures(...) 返回时,Callables 实际上并没有被取消,而是以某种方式继续运行。从if (Thread.currentThread().isInterrupted()) log.error("XXX was interrupted");
语句中可以看出,在 port.getFeatures 返回后设置了中断标志,这仅在 Webservice 调用正常完成后可用,而不是在我调用 Cancel 时被中断。
谁能告诉我我做错了什么以及如何在给定时间段后停止正在运行的 CXF Webservice 调用,并在我的应用程序中注册此信息?
最好的问候,蒂姆
java - 多线程搜索操作
我有一个接受一系列查询的方法,我需要针对不同的搜索引擎 Web API 运行它们,例如 Google 或 Yahoo 的。为了使该过程并行化,为每个查询生成一个线程,然后join
在最后对其进行编辑,因为我的应用程序只能在获得每个查询的结果后才能继续。我目前有这些方面的东西:
最近,我发现 Java 中有一个新的API 用于执行并发作业。即Callable
接口FutureTask
和ExecutorService
。我想知道这个新 API 是否应该使用,它们是否比传统 API 更有效,Runnable
以及Thread
.
在研究了这个新的 API 之后,我想出了以下代码(简化版):
我是这个并发 API 的新手,我想知道上面的代码中是否有可以改进的地方,以及它是否比第一个选项(使用Thread
)更好。有些课程我没有探索,例如FutureTask
,等等。我也很想听听这方面的任何建议。
java - Java Thread - 奇怪的 Thread.interrupted() 和 future.cancel(true) 行为
我想管理我的 TaskExecutor 返回的 Futures 对象列表。
我有这样的东西
ProcessThis 是实现 Callable<String> 并检查 Thread.interrupted() 状态的任务
现在的问题是,当调用 Thread.interrupted() 时,只有一部分并发线程返回“真”。
removeFutures() 中的断言为每个被删除的未来返回 true(我也检查了 isDone() 和 isCompleted()。
被中断的线程数是随机的。超过 15 个正在运行的线程,有时 13 个被中断,有时 2 个 .. .
我真的不明白问题出在哪里.如果我调用future.cancel(true)并且返回true...然后我检查Thread.interrupted(仅调用一次),我希望它也返回true .
知道我错过了什么吗?
我正在构建 java 1.6.0_02-b05
java - 关于未来的良好文档/书籍
任何人都可以推荐一本关于Java中Future接口的好的文档/教程/书籍吗?
java - 获得未来进展的能力目的
参考 java.util.concurrent 包和 Future 接口,我注意到(除非我弄错了)启动冗长任务和查询进度的能力只有 SwingWorker 实现类才有。
这就引出了以下问题:
有没有办法在非 GUI、非 Swing 应用程序(成像控制台应用程序)中在后台启动一个冗长的任务并允许其他线程检查进度?在我看来,没有理由将此功能仅限于 swing / GUI 应用程序。否则,在我看来,唯一可用的选项是通过 ExecutorService::submit 返回一个 Future 对象。但是,基础 Future 接口不允许监控进度。
java - 您会在 App Engine 中使用“未来”做什么?
在docs中,FutureWrapper 的定义如下:
FutureWrapper 是一个简单的 Future,它包装了一个父 Future。
什么是未来,为什么需要包装它以及何时在 App Engine 中使用它?