线程 Callable FutureTask 入门

原创 2013年12月04日 10:21:36

Callable和Runnable的区别如下:

1)Callable定义的方法是call,而Runnable定义的方法是run.

2)Callable的call方法可以有返回值,而Runnable的run方法不能有返回值

3)Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常

 

Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的

结果.Future的cancel方法取消任务的执行,有一个布尔参数,参数为true表示立即中断任务的执行,参数

为false表示允许正在运行的任务运行完成.Future的get方法等待计算完成,获取计算结果.

 

创建并启动有返回值的线程步骤与实现Runnable接口相似:
1.创建Callable接口的实现类,并实现call()方法
2.创建Callable实现类的实例,使用FutureTask类来包装Callable对象
3.使用FutrueTask对象作为Thread对象的target创建并启动新线程。
4.调用FutrueTask对象的get()方法来获得子线程执行结束后的返回值。

 

public class MyCallable implements Callable<String> {

	@Override
	public String call() throws Exception {
		System.out.println("Thread.sleep(3000) before");
		Thread.sleep(3000);
		System.out.println("Thread.sleep(3000) after");
		return "huangbiao";
	}

}

 

public class TestCallable {

	public static void main(String[] args) throws Exception {
		MyCallable myCallable = new MyCallable();
		FutureTask<String> fts = new FutureTask<String>(myCallable);
		//FutureTask 继承了Runnable, Future<V>, RunnableFuture接口
		new Thread(fts).start();
		System.out.println("开始启动线程");
		//get()方法:如有必要,等待计算完成,然后获取其结果。
		System.out.println("返回线程值:" + fts.get());
	}

}

 

Java并发编程:Callable、Future和FutureTask原理解析

返回结果的任务Callable与FutureExecutor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,它不能返回一个值或抛出一个受检查的异常。Runna...
  • codershamo
  • codershamo
  • 2016年07月13日 20:00
  • 5372

高级并发编程学习-callable与Future的使用

FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过Fu...
  • leixingbang1989
  • leixingbang1989
  • 2016年01月11日 19:05
  • 1650

java线程(3)——详解Callable、Future和FutureTask

接上篇博客 java线程——三种创建线程的方式 ,这篇博客主要介绍第三种方式Callable和Future。比较继承Thread类和实现Runnable接口,接口更加灵活,使用更广泛。但这两种方式都...
  • u010066934
  • u010066934
  • 2016年04月09日 20:55
  • 1346

Callable/Future Runnable 以及 FutureTask 用法

Callable/Future Runnable 以及 FutureTask 用法
  • conquer0715
  • conquer0715
  • 2013年10月07日 05:50
  • 5848

FutureTask的用法及两种常用的使用场景

FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过Fu...
  • linchunquan
  • linchunquan
  • 2014年03月28日 15:00
  • 15757

创建线程的第三种方法-callable futureTask

通过实现Callable接口来创建Thread线程:其中,Callable接口(也只有一个方法)定义如下:    public interface Callable   { V call() thr...
  • liguoqing2012
  • liguoqing2012
  • 2015年09月23日 22:24
  • 173

Java 多线程设置线程超时时间之 Callable接口和Future接口 线程超时控制

来源URL:http://blog.csdn.net/zlj526/article/details/40782027 Callable接口和Future接口介绍         在Java中,如...
  • u013160024
  • u013160024
  • 2017年02月11日 19:28
  • 1030

JAVA并行异步编程,线程池+FutureTask+callable+ExecutorService

java 在JDK1.5中引入一个新的并发包java.util.concurrent 该包专门为java处理并发而书写。 在java中熟悉的使用多线程的方式为两种?继续Thread类,实现Runna...
  • mack415858775
  • mack415858775
  • 2016年05月26日 15:22
  • 7035

Future和Callable、FutureTask实现,带有返回值的线程请求

通过ExecutorService.submit()方法提交的任务,可以获取任务执行完的返回值。 在实际业务场景中,Future和Callable基本是成对出现的,Callable负责产生结果...
  • zhizhuodewo6
  • zhizhuodewo6
  • 2017年09月08日 18:37
  • 138

(原创)Callable、FutureTask中阻塞超时返回的坑点

直接上代码 import java.util.concurrent.Callable; public class MyCallable implements Callable { ...
  • starcrm
  • starcrm
  • 2016年09月18日 17:39
  • 656
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程 Callable FutureTask 入门
举报原因:
原因补充:

(最多只允许输入30个字)