转自:http://blog.sina.com.cn/s/blog_4c2e288b01000ark.html
Callable
接口类似于
Runnable
,两者都是为那些其实例可能被另一个线程执行的类设计的。但是
Runnable
不会返回结果,并且无法抛出经过检查的异常。
用下面的例子说明他们彼此的实现的不同:
类构造:
public class RunnableClass implements
Runnable{
public void run(){
}
}
public class CallableClass implements
Callable{
public
V call() throws Exception{
return V
}
}
类调用:
Thread runnable=new
Thread(RunnableClass);
runnable.start();
Callable<int[]> callable=new
callableClass();
FutureTask<int[]> future=new
FutureTask(int[])(callable);
Thread t=new Thread(future);
t.start();
if(future.isDone()){
int[]
intValue=future.get();
}
代码说明:
FutureTask 属于代理类
,负责启动Callable对象,并且可以通过它来获得Callable
的返回信息。
再举一个例子,如下代码:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Runnable是执行工作的独立任务,但是它不返回任何值,
* 如果希望任务在完成时能够返回一个值,可以实现Callable接口
*/
public class PrimeThread {
public static void main(String[] args) throws Exception {
ExecutorService service = Executors.newCachedThreadPool();
System.out.println("==" + service.submit(new TaskResult(66)).get().toString());
}
}
class TaskResult implements Callable<String> {
private int id;
public TaskResult(int id) {
this.id = id;
}
public String call() throws Exception {
return "result of TaskWithResult " + id;
}
}
分享到:
相关推荐
`Future`、`FutureTask`、`Callable`和`Runnable`是Java并发编程中的核心接口和类,它们在Android开发中同样有着广泛的应用。下面将详细介绍这些概念以及它们如何协同工作。 1. `Runnable`: 这是Java中最基础的多...
在实际开发中,ExecutorService(如ThreadPoolExecutor)经常与Future和FutureTask一起使用,因为ExecutorService可以提交Runnable或Callable任务,并返回Future,从而实现对任务的异步处理和结果获取。例如: ```...
大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...
Callable接口与Runnable类似,但其call()方法可以返回一个值并抛出异常。通过FutureTask包装Callable,可以将其转换为Runnable,然后创建线程。例如: ```java public class MyCallable implements Callable...
而Callable接口与Runnable类似,但它的call()方法可以返回一个结果,并能抛出异常,适合于需要返回值的异步计算。 当我们需要创建一个临时的任务或者对象仅在本地使用,而无需定义一个完整的类时,可以使用匿名内部...
目录: 简介 Callable接口的基本用法 2.1 创建Callable任务 2.2 提交Callable任务 2.3 获取任务执行结果 ...Callable与Runnable的对比 Callable的异常处理 Callable的应用场景 最佳实践与注意事项
例如,可以使用`Executors.callable(Runnable task, V result)`将一个Runnable转换为Callable,这样Runnable的任务就可以返回一个结果。 7. **应用场景** Callable常用于FutureTask或者ExecutorService中。...
Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项。 首先,Java 5开始,Java提供了...
与Runnable接口相比,Callable接口提供了更强大的功能,因为Runnable只能定义无返回值的任务,而Callable可以定义有返回值的任务。这篇教程将深入探讨如何在Java中使用Callable。 Callable接口位于`java.util....
在Java编程中,创建线程主要有三种方式:继承Thread类、实现Runnable接口以及实现Callable接口。下面我们将逐一探讨这些方式的细节。 **方式一:继承Thread类实现多线程** 这种方式是最直观的创建线程的方法。首先...
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 ...
面试中,理解`Thread`和`Runnable`的区别很重要。`Thread`适合需要直接继承的场景,而`Runnable`更适合多态和资源共享。`Callable`则在需要从线程获取返回值的情况下更为适用。掌握这些基础,能帮助你在实际编程中更...
Callable 与 Runnable 相似,但具有更强大的功能,允许任务返回结果并处理异常。 Callable 接口: Callable 接口中定义了 `call()` 方法,与 Runnable 的 `run()` 方法不同。`call()` 方法可以抛出受检异常...
`Callable`接口与我们熟知的`Runnable`接口相似,但功能更加强大,主要体现在以下几个方面: 1. **方法签名的不同**:`Callable`接口包含一个`call()`方法,而`Runnable`接口则包含一个`run()`方法。`call()`方法...
首先,Callable接口与Runnable接口类似,都是用于创建新线程的接口。但是,Runnable接口的run()方法无返回值,而Callable的call()方法可以返回一个结果,并且允许在计算过程中抛出异常。在上述示例中,`MyThread`类...
这是Callable和Runnable接口最大的区别。 Future接口是Java多线程编程中用于描述异步计算的结果的接口。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可了解任务执行情况,...
四、Callable与Runnable的区别 Callable接口和Runnable接口都是用于多线程的接口,但是它们有所不同。Runnable接口没有返回值,而Callable接口可以返回执行结果。Runnable接口的run()方法返回void类型,而Callable...