线程 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_并发线程_Future、FutureTask、Callable

1.Futrue public interface Future //Future 表示异步计算的结果ExecutorService threadPool = Executors.newSingleT...

线程结果回调Runnable、Callable、Future、FutureTask

//线程可以用我们常用的Runnable接口实现,但是这样没有返回值,如果想要线程运行结果,可以使用Callable、Future、FutureTask使用Runnable Execut...
  • pengkv
  • pengkv
  • 2016年05月17日 10:28
  • 1841

三种Java创建线程的方式(Callable,FutureTask)

Java线程具有并发性和异步性,可以说线程是轻量级别的进程,java中线程和现代操作系统中的进程调度都是采用采用抢占式运行。但线程和进程最大的区别是:一个进程中的多个进程共享这个进程的内存空间和系统资...

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

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

Java多线程研究06-带返回值的线程定义接口Callable以及Future,FutureTask的使用

带返回值的CallableJAVA线程相关的Runnable接口中的run()方法没有提供返回值,如下:...... public void run() { ...... } ......如果...

Java线程之Runnable,Callable,FutureTask

线程执行中的Runnable, Callable, FutureTask

Java多线程——Callable、Future和FutureTask

通过Thread或Runnable创建的线程,都需要重写run方法,而run方法的返回是void的,所以使用这种方式无法获取线程执行结果。但java提供了其他类和方法来获取线程执行结果,主要的类有Ca...

多线程(九)Callable、Future和FutureTask

引言  在前面的文章-多线程(一) 多线程介绍及基本使用中我们讲述了创建线程的4种方式,其中一种是Callable、Future和FutureTask方式实现的。  直接继承Thread,或者实现Ru...

【Java多线程】-Callable,Future,FutureTask

一、Callable与Runnable的区别1)Runnable是一个接口,里面只申明了一个run()方法,run()方法的返回值为void类型,因此,任务执行完后不会返回任何结果。public in...
  • tailyou
  • tailyou
  • 2015年09月14日 10:27
  • 215
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程 Callable FutureTask 入门
举报原因:
原因补充:

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