Callable接口定义了一个call方法可以作为线程的执行体,但call方法比run方法更强大:
A、call方法可以有返回值
B、call方法可以申明抛出异常
Callable call方法有一个返回值,
call方法不能直接调用,它作为线程的执行体被调用。
JDK1.5提供了Future接口来代表Callable接口里的call方法的返回值,并为Future接口提供了一个FutureTask实现类,该实现类实现Future接口,
并实现了Runnable接口—可以作为Thread的target。
Future接口里定义了如下几个公共方法控制他关联的Callable任务:
A、boolean cancel(Boolean mayInterruptlfRunning):试图取消该Future里关联的Callable任务
B、V get():返回Callable任务里的call方法的返回值,调用该方法将导致线程阻塞,必须等到子线程结束才得到返回值
C、V get(long timeout, TimeUnit unit):返回Callable任务里的call方法的返回值,该方法让程序最多阻塞timeout和unit指定的时间。
如果经过指定时间后Callable任务依然没有返回值,将会抛出TimeoutException。
D、boolean isCancelled:如果在Callable任务正常完成前被取消,则返回true。
E、boolean isDone:如果Callable任务已经完成,则返回true
创建、并启动有返回值的线程的步骤如下:
一、创建Callable接口的实现类,并实现call方法,该call方法的返回值,并作为线程的执行体。
二、创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call方法的返回值
三、使用FutureTask对象作为Thread对象的target创建、并启动新线程
四、调用FutureTask对象的方法来获得子线程执行结束后的返回值
1、Executor框架使用Runnable作为其任务的基本表达形式。Runnable相当有限,不能返回一个值,也不能抛出受检查的异常,对于复杂费时的计算更加无法处理
2、因此产生了Callable和Future这种任务,对任务进行全面管理
3、
1)Callable在主进入点-call处等待返回值,并为可能抛出的异常预先做了准备。
2)Executors包含了一些工具方法将其他类型的任务封装成一个Callable,比如Runnable和java.security.PrivilegedAction。Runnable和Callable描述的是抽象的计算型任务。
3)这些任务很有限,有明确的开始和结束,但是对于非常费时的任务比较麻烦,对于已经提交但尚未开始的任务可以取消,但是对于已经开始的任务,只有它们响应中断,才可以取消。
4、
1)Future描述了任务的生命周期,并提供了相关的方法来获得任务的结果、取消任务以及检验任务已经完成还是被取消。
2)Future意味着任务完成后永远停留在完成状态上,就像ExecutorService的生命周期。使用get方法完成任务和异常处理。
3)ExecutorService中的所有submit方法都返回一个Future,可以将一个Runnable或一个Callable提交给executor,然后得到一个Future。
也可以显式地为给定的Runnable或Callable实例化一个FutureTask。
分享到:
相关推荐
Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...
Callable 和 Future 是 Java 多线程编程中两个重要的接口,它们在处理异步计算和结果获取方面发挥着关键作用。Callable 与 Runnable 相似,但具有更强大的功能,允许任务返回结果并处理异常。 Callable 接口: ...
"Java多线程Callable和Future接口区别" Java多线程Callable和Future接口是Java语言中两个非常重要的接口,它们都是Java多线程编程中使用的接口,用于描述异步计算的结果。在JavaSE5中引入的Callable是一个具有类型...
`Callable`和`Future`的组合是Java并发包中一个强大的工具,它弥补了`Runnable`接口的不足,使得异步编程可以获取到返回值并处理异常。同时,`ExecutorService`作为线程池的实现,为并发编程提供了一种优雅的解决...
Java并发编程中的ExecutorService、Callable和Future Java并发编程中,ExecutorService、Callable和Future是三大核心组件,它们之间紧密相连,共同实现了高效、安全的并发编程。下面我们将详细介绍这些组件的作用和...
Java通过Callable和Future来接收线程池的执行结果 Java中的线程池执行结果获取一直是一个棘手的问题,对于直接继承Thread的方式或实现Runnable接口的方式,都无法获取到线程执行的返回结果。如果线程在执行过程中...
Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...
Java concurrency线程池之Callable和Future Java concurrency是一个重要的概念,在Java编程中,线程池是一个关键组件。今天,我们将详细介绍Java concurrency线程池之Callable和Future,这两个组件在Java并发编程中...
Callable,Future的使用方式,里面使用了三种使用方式分别是FutureTask,ExecutorService,ExecutorCompletionService
在Java编程中,Callable接口和Future接口是多线程编程中的重要工具,它们在Web应用程序的性能优化中扮演着关键角色。本篇文章将深入探讨Callable和Future如何在Web应用中提高效率并优化资源利用。 Callable接口是...
从Java 1.5开始,引入了Callable和Future接口,为并行编程提供了一种更为高效和便捷的解决方案。 Callable接口是Java并发库中的一个关键接口,位于`java.util.concurrent`包下。Callable接口与Runnable接口类似,但...
在Java多线程编程中,`Callable`接口和`Future`接口是两个重要的组件,它们提供了比`Runnable`接口更强大的功能,尤其是在处理异步计算和结果获取时。本文将详细介绍这两个接口以及如何使用它们来创建自定义任务类以...
Callable 和 Future 是 Java 多线程编程中的两个关键接口,它们在 Java 5 及以上版本引入,以增强并发处理的能力。Callable 接口类似 Runnable,但提供了更丰富的功能,而 Future 对象则用于管理和控制异步计算的...
自留demo,主要是Thread-Callable-Future的基本实现。 参考文章: 1、深入理解Callable https://blog.csdn.net/qq_19431333/article/details/77483763 2、彻底理解Java的Future模式: ...
Runnable、Callable、Future、FutureTask有什么关联.docx
通过合规策略对服务器进行监控,确保服务器的运行、帐号在服务器上的操作符合预设的规则...进程:监控服务器上的进程,并对某些进程、目录、文件进行标识和监控,只允许指定的进程对指定目录下的指定格式文件执行写操作
2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...
Callable接口和Future接口的组合使用,能够实现多线程并发执行任务,并获取执行结果。 一、Callable接口简介 Callable接口是一个泛型接口,用于表示可以调用并返回结果的代码。它提供了一个call()方法,该方法...
### Java特别篇-关于线程创建的三种方式的总结对比 ... - **使用Callable和Future接口**:这种方式支持返回结果和抛出异常,适合需要计算结果的场景。相对前两种方式更为复杂,但在某些场景下非常有用。
然后,我们使用Callable来定义查评论列表和查点赞列表的任务,并将其提交给线程池。最后,我们使用Future来获取Callable任务的返回值。 异步化改造接口 在上面的代码中,我们可以看到异步化改造接口的实现。我们...