java - Java Future 和 RejectionHandler 的查询

标签 java multithreading java-8 future threadpoolexecutor

我对 future 的使用有一些疑问。在解决我的疑问之前,请先阅读下面的示例。

http://javarevisited.blogspot.in/2015/01/how-to-use-future-and-futuretask-in-Java.html

  1. 使用线程池和Executors的主要目的是异步执行任务而不阻塞主线程。但是一旦你使用Future,它就会阻塞调用线程。我们是否必须创建单独的新线程/线程池来分析 Callable 任务的结果?或者还有其他好的解决方案吗?
  2. 由于 Future 调用会阻塞调用者,是否值得使用此功能?如果我想分析任务的结果,我可以进行同步调用并检查调用的结果,而无需 Future
  3. 使用 RejectionHandler 处理拒绝任务的最佳方法是什么?如果任务被拒绝,将任务提交到另一个线程或线程池,或者再次将相同的任务提交到当前ThreadPoolExecutor,这是一个好的做法吗?

如果我对此功能的思考过程有误,请纠正我。

最佳答案

您的问题是关于在异步操作完成后执行操作。另一方面,如果您有一个不相关的 Activity 可以在异步操作运行时执行,那么 Future 就很好。然后,您可以通过 isDone() 定期轮询 Future 表示的操作,如果没有,则执行其他操作,或者如果没有,则调用阻塞 get()您的当前线程不再有不相关的工作。

如果您想安排完成时操作而不阻塞当前线程,您可以使用 CompletableFuture它提供了这样的功能。

关于java - Java Future 和 RejectionHandler 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30919462/

相关文章:

java - wrap_content 不会调整字体大小吗?

java - 数组困惑

ios - 主队列上的调度屏障

java - 有没有另一种方法可以使用 CAS 操作在 Java 中编写同步块(synchronized block)?

java - 从 HashMap 获取值并填充 Java 对象

Java 图形 JApplet

java - 使用按钮和鼠标监听器移动图形对象

c++ - 为什么我用了std::future::get还要加入线程?

java - 在 Java8 函数式风格中,我如何将值映射到已经存在的键值对

Java流不匹配多个条件