要并行或异步运行一些东西,我可以使用ExecutorService:
除了返回类型“未来”与“可完成的未来”之外,还有任何显著差异。或者什么时候用什么?
如果使用带默认执行器的CompletableFuture API(不带执行器的方法),会有什么区别?
这让我更清楚了未来和可完成未来之间的区别:未来和promise之间的区别
可完成的未来更像是一个promise。
CompletableFuture具有丰富的功能,如链接多个future、组合future、在future执行后执行某些操作(同步和异步)等。
但是,CompletableFuture在性能方面与Future没有什么不同。即使组合了CompletableFuture的多个实例(最后使用. thenComine和. join),除非我们调用. get方法,否则它们都不会被执行,在此期间,调用线程被阻塞。我觉得在性能方面,这并不比Future好。
如果我在这里缺少某些方面的表现,请告诉我。
除了收益型期货与完全型期货有显著差异外。或者什么时候用什么?
其实很简单。当希望执行线程等待异步计算响应时,可以使用Future。这方面的一个示例是并行合并/排序。向左异步排序、向右同步排序、向左等待完成(future.get()
),合并结果。
当您希望从执行的线程异步执行某些操作,并在完成后得到结果时,可以使用CompleteableFuture。例如:我想异步进行一些计算,在计算时,将结果写入某个系统。请求线程可能不需要等待结果。
您可以在未来的单个可执行文件中模拟上述示例,但CompletableFuture提供了更流畅的界面和更好的错误处理。
这真的取决于你想做什么。
如果使用带默认执行器的CompletableFutureApi(不带执行器的方法),有什么区别?
它将委托给ForkJoin。commonPool()是系统上CPU数量的默认大小。如果您正在执行IO密集型操作(读取和写入文件系统),那么应该以不同的方式定义线程池。
如果是CPU密集型的,那么使用commonPool最有意义。
我正在尝试将一个任务提交给Java的ExecutorService。它要么需要一个Callable,它允许抛出异常,要么需要一个Runnable。我的用例是愚蠢的:我想安排一个抛出异常的任务,但它是一个无效的方法。因此,我不能使用Callable或Runnable,因为方法定义与我的用例不匹配。我还想让我的异常从提交后收到的Future传播。有什么想法吗?
向ExecutorService对象提交任务的执行顺序是什么? 场景:让我们暂时假设Executor线程池大小为5,我已经向它提交了20个可运行任务,我们知道一次只能执行5个任务,其余的任务将在bucket中等待。所以我的问题是提交的任务以什么顺序执行。它是遵循FIFO数据结构还是从bucket中随机选取任务。 还有,有没有办法指定它应该以什么顺序执行。 例子:
我一直在寻找这样一种情况的解决方案:我有一个调用项的哈希集,并且我要将这个集提交给执行器进行并行执行。现在我想只要任何提交的任务完成,我应该能够分配一个新的Callable到Executor。 我尝试了这段代码,但是如果我使用Executor.Invoke,那么Executor将等待直到所有任务完成,如果我使用Executor.Submit,那么任务将按顺序完成。如有任何帮助,我们将不胜感激。
问题内容: 我有三个连接的线程,即第二个线程在第一个死后执行。 这是我的代码: 我将如何使用而不是三个线程对象来实现此功能? 问题答案: 如果您想要/需要的是一个接一个地执行一组作业,但要在与主应用程序线程不同的单个线程中执行,请使用。
我使用java.util.concurrent.ExecutorService和固定线程池来执行任务列表。我的任务列表通常在80-150个左右,我已经将任何时候运行的线程数限制为10个,如下所示: 我的用例要求即使完成的任务也应该重新提交给ExecutorService,但是只有当所有已经提交的任务都被服务/完成时,才应该再次执行/获取。也就是说,提交的任务基本上应该轮流执行。因此,在这种情况下不
我正在使用sping-boot,我有这样一个用例,我想将列表的每个元素提交给执行器服务(线程池大小=4)。但是在每个必须处理的元素之间,我想要1秒钟的延迟。 Thread.sleep(1000)不工作,因为执行程序一睡觉就启动另一个线程。 编辑:这是我的process()方法,我在最后尝试使用sleep,但没有成功。