转自: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;
}
}
分享到:
相关推荐
http://blog.csdn.net/yangzhaomuma/article/details/51722779
大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...
主要介绍了Java中的Runnable,Callable,Future,FutureTask的比较的相关资料,需要的朋友可以参考下
主要介绍了Java 线程(Thread,Runnable,Callable)实例详解的相关资料,这里对java 线程的三种方法进行了对比,需要的朋友可以参考下
Thread和Runnable的区别 (Callable扩展) 线程 Thread Runnable 扩展——Callable 面向小白学习法——Thread和Runnable,扩展Callable! Thread和Runnable的区别 (Callable扩展) 在面试当中,面试官...
目录: 简介 Callable接口的基本用法 2.1 创建Callable任务 2.2 提交Callable任务 2.3 获取任务执行结果 ...Callable与Runnable的对比 Callable的异常处理 Callable的应用场景 最佳实践与注意事项
Callable和Runnable有几点不同: (1)Callable规定的方法是call(),而Runnable规定的方法是run(); (2)call()方法可抛出异常,而run()方法是不能抛出异常的。 (3)Runnable不会返回结果,而Callable可以返回结果。 ...
2 如何使用FutureTask 、Future、Callable、线程池实现线程2.1 FutureTask + Callable实现多线程2.2 线程池+Future+Callable 实现多线程3 Runnable、Callable、Future和FutureTask之间的关系3.1 整体关系介绍3.2 ...
NULL 博文链接:https://pengqb.iteye.com/blog/738210
Callable and Runnable wrappers .when(new Runnable() {…}) Uses Executor Service Java Generics support Deferred deferred; deferred.resolve(10); deferred.reject(new Exception()); deferred.notify(0.80)...
Java中Runnable和Callable的区别 Runnable和Callable都代表要线程中执行的任务。Runnable是JDK1.0加入的,而Callable确实是在JDK1.5加入的。 区别:Callable的 call() 方法可以返回值和抛出异常, 而Runnable的...
callable / runnable FutureTask JUC常用辅助类 CountDownLatch (减少计数器) CyclicBarrier(加法计数器) Semaphore(信号量,流量控制) ReentrantReadWriteLock (读写锁) BlockingQueue(阻塞队列) 线程池 ...
Runnable是执行工作的独立任务,但是它不返回任何值,如果你希望任务在完成时能够返回一个值,那么可以实现Callable接口而不是Runnable接口。在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示...
继承Thread类实现多线程: 1. 在Java中负责实现线程功能的类是java.lang.Thread 类。 2. 可以通过创建 Thread的实例来创建新的线程。 3. 每个线程都是通过某个特定的Thread对象所对应的方法run( )来完成其操作的,...
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务
文章目录前言1.Callable的前世今生1.1 Callable的前世Runnable测试结果1.2 Callable的今生通过FutureTask+Thread调用ExecutorService+Future调用实现2.源码分析2.1 第一步,实现Callable接口2.2 FutureTask类结构图...
描述:该方法有对于Callable、Runnable的重载方法,线程池状态不同,有四种执行策略 处理任务的四种策略: 1、当前线程数 < 核心线程数,添加新的worker并执行任务 2、当前线程数 >= 核心线程数 &
企业常见java面试题,java基础,java进阶 ...说一下 runnable 和 callable 有什么区别? 线程的 run()和 start()有什么区别? 创建线程池有哪几种方式? 在 java 程序中怎么保证多线程的运行安全? 什么是死锁?