ExecutorService——invokeAny(Collection<? extends Callable<T>> tasks)

类似于InvokeAll方法,但是返回的条件不一样。

invokeAny方法执行后,只要有一个任务完成(执行成功,没有抛出异常的那种)。它就会返回这个任务的执行结果作为返回值。

而且,一旦invokeAny方法正常返回或者抛出异常,那些没有完成的任务将被取消。

有什么用途呢,如果其他任务都被取消了,不会影响吗?

答案就是,这些任务的目的都是一个,只要有一个完成就好了。比如:我想要让我同学早点脱单,于是我同时给他介绍了好几个对象(好几个任务),只要他跟其中一个好上了,其他女生就没有必要再勾搭了。

原文地址:https://www.cnblogs.com/longfurcat/p/9484374.html

时间: 2024-10-11 08:18:52

ExecutorService——invokeAny(Collection<? extends Callable<T>> tasks)的相关文章

ExecutorService——invokeAll(Collection&lt;? extends Callable&lt;T&gt; tasks, long timeout, TimeUnit unit)

类似于invokeAll(Collection<? extends Callable<T> tasks)不过它设置了超时时间.有个时间上限. 在这种情况下,要么任务全部"完成",要么超时,方法就会返回. 这里有意思的是,时间不是简单的毫秒,而是时间单位数+时间元的概念.这样就能灵活地进行设置了,我们除了可以设置毫秒,还可以设置秒.分钟.小时,天.特别是后者在编程中非常直观 ExecutorService.java(部分源码) 原文地址:https://www.cnbl

ExecutorService.invokeAny()和ExecutorService.invokeAll()的使用剖析

ExecutorService是JDK并发工具包提供的一个核心接口,相当于一个线程池,提供执行任务和管理生命周期的方法.ExecutorService接口中的大部分API都是比较容易上手使用的,本文主要介绍下invokeAll和invokeAll方法的特性和使用. package tasks; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; public class SleepSecondsC

Java基础系列之(二) - 线程

一.线程的实现方式 1.继承Thread 2.实现Runnable接口 二.线程的状态 1.New(新生线程) 当你new一个Thread,newThread(r),这时处于线程的新生状态,此时程序还没有真正的运行. 2.Runnable(可运行的) 当启动start()方法时,此时线程处于可运行状态,不一定运行之中,这取决与线程是否得到CPU的运行时间片.事实上,一个线程并不是一直处于运行状态,偶尔需要被中断,让其他线程有运行的机会. 3.Blocked(被阻塞) 当发生以下情况被阻塞 -线程

聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计

上一篇讲了Executor接口的设计,目的是将任务的运行和任务的提交解耦.能够隐藏任务的运行策略.这篇说说ExecutorService接口.它扩展了Executor接口,对Executor的生命周期进行管理.并进行了进一步的扩展. Executor负责执行任务. 它的生命周期有3个:执行,关闭和已终止. 在执行的不论什么时刻,有些 任务可能已经完毕,有些可能正在执行,有些可能正在队列中等待执行.所以假设要关闭Executor的话.就有多种方式,比方优雅平滑的关闭,当执行关闭时就不在接受新的任务

ExecutorService 接口

先看一个Executor接口,该接口只有一个方法:void execute(Runnable command),用于在未来某个时刻提交一个command,这个command可以被提交到一个新的线程,或者一个线程池,或者在调用线程中. ExecutorService接口继承了Executor接口.主要是增加了shutDown.shutDownNow.invokeAll.invokeAny和submit方法. invokeAny(Collection<? extends Callable<T>

Android线程管理之ExecutorService线程池(二)

前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 为什么要引入线程池? 1.)new Thread()的缺点 每次new Thread()耗费性能 调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪. 不利于扩展,比如如定时执行.定期执行.线程中断 2.)采用线程池的优点 重用存在的线程,减少对象创建.消亡的开销,性能佳 可有效控制最大并发线程数,提高系统资源的使用率,同

java并发编程框架 Executor ExecutorService invokeall

首先介绍两个重要的接口,Executor和ExecutorService,定义如下: Java代码   public interface Executor { void execute(Runnable command); } Java代码   public interface ExecutorService extends Executor { //不再接受新任务,待所有任务执行完毕后关闭ExecutorService void shutdown(); //不再接受新任务,直接关闭Execut

JDK 源码解析 —— Executors ExecutorService ThreadPoolExecutor 线程池

零. 简介 Executors 是 Executor.ExecutorService.ThreadFactory.Callable 类的工厂和工具方法. 一. 源码解析 创建一个固定大小的线程池:通过重用共享无界队列里的线程来减少线程创建的开销.当所有的线程都在执行任务,新增的任务将会在队列中等待,直到一个线程空闲.由于在执行前失败导致的线程中断,如果需要继续执行接下去的任务,新的线程会取代它执行.线程池中的线程会一直存在,除非明确地 shutdown 掉. public static Exec

java中Executor、ExecutorService、ThreadPoolExecutor介绍(转)

1.Excutor 源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /**     * Executes the given command at some time in the future.  The command     * may execute in a new thread, in a pooled thread, or in the calling     * thread, at the